Abblix.Utils
2.4.0
Prefix Reserved
dotnet add package Abblix.Utils --version 2.4.0
NuGet\Install-Package Abblix.Utils -Version 2.4.0
<PackageReference Include="Abblix.Utils" Version="2.4.0" />
<PackageVersion Include="Abblix.Utils" Version="2.4.0" />
<PackageReference Include="Abblix.Utils" />
paket add Abblix.Utils --version 2.4.0
#r "nuget: Abblix.Utils, 2.4.0"
#:package Abblix.Utils@2.4.0
#addin nuget:?package=Abblix.Utils&version=2.4.0
#tool nuget:?package=Abblix.Utils&version=2.4.0
Abblix.Utils
The foundation layer of the Abblix packages: the small, dependency-light pieces that security-focused code keeps needing - careful URI construction, log sanitization, cryptographic encodings, JSON converters for wire formats, and a Result type for expected failures. The JWT, OIDC Server, Security Events and Shared Signals packages all build on it; it is equally usable on its own.
Install
dotnet add package Abblix.Utils
What is inside
URIs and parameters
UriBuilder, UriExtensions and ParametersBuilder construct and take apart URIs with explicit control over query and fragment parts - the difference that matters when a redirect URI must carry a response exactly where the protocol says, and nowhere else.
Result: expected failures as values
Result<TSuccess, TFailure> models an operation whose failure is an expected outcome rather than an exception - validation, protocol errors, lookups that legitimately find nothing. Both outcomes are values, Match and the MapSuccess/MapFailure combinators compose them railway-style, and TryGetSuccess/TryGetFailure unwrap at the edges:
Result<AuthorizedGrant, AuthError> result = await AuthorizeAsync(request);
return result.Match(RenderTokens, RenderError);
Log sanitization
Sanitized wraps a value for logging so an ASCII control character cannot forge a log line: at formatting time it escapes line breaks, tabs, quotes and separators, and strips the C0 range and DEL. Wrap anything a caller sent - identifiers, URIs, header values - before it reaches a log template:
logger.LogWarning("Unknown client {ClientId}", Sanitized.Value(clientId));
The stripping runs in ToString(), so it protects the formatted message; a sink that serializes the wrapper's Source property instead reads the raw value by design.
Cryptographic encodings and randomness
CryptoRandom produces cryptographically strong random material for tokens and identifiers. Base32 and HexConverter cover the encodings certificates and secrets travel in, and CertificateId with ICertificateProvider abstracts certificate lookup.
JSON converters for wire formats
Custom System.Text.Json converters for the shapes protocol messages actually use: unix-seconds timestamps (DateTimeOffsetUnixTimeSecondsConverter), durations as integer seconds (TimeSpanSecondsConverter), space-separated lists such as OAuth scopes (SpaceSeparatedValuesConverter), values that arrive as either a single item or an array (SingleOrArrayConverter), base64url binary (Base64UrlTextEncoderConverter), and null-dropping serialization (JsonIgnoreNullsAttribute).
Distributed cache helpers
DistributedCacheExtensions adds the operation IDistributedCache lacks for security bookkeeping: TryAddAsync, an add-if-absent that expresses first-sighting checks - replay caches and similar - over any cache backend. It is Get-then-Set, because the interface exposes no compare-and-set, so the guarantee is probabilistic under concurrency; a domain needing strict exactly-once takes a backend-native atomic (SET NX EX, INSERT ... ON CONFLICT DO NOTHING) instead.
Collections and enums
ArrayExtensions, EnumerableExtensions, EnumFlagExtensions and ObjectExtensions carry the small operations that otherwise get re-implemented per project.
Part of the Abblix product family
Abblix.Utils sits under Abblix.JWT, Abblix.OIDC.Server, Abblix.SecurityEvents and the rest of the family; the full set lives in the repository.
License
Abblix.Utils is licensed under the Apache License 2.0.
Contacts
- General inquiries: info@abblix.com
- Support and security reports: support@abblix.com
- Website: Abblix OIDC Server
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Caching.Abstractions (>= 10.0.8)
-
net8.0
- Microsoft.Extensions.Caching.Abstractions (>= 10.0.8)
-
net9.0
- Microsoft.Extensions.Caching.Abstractions (>= 10.0.8)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Abblix.Utils:
| Package | Downloads |
|---|---|
|
Abblix.JWT
JWT, JWS, JWE and JWK library for .NET built on the platform's own cryptography, with no dependency on Microsoft.IdentityModel. Sign, encrypt and validate tokens, manage JSON Web Keys, and keep signing keys in HashiCorp Vault, OpenBao or Azure Key Vault. |
|
|
Abblix.SecurityEvents
Security Event Tokens (RFC 8417) for .NET with Subject Identifiers (RFC 9493), push (RFC 8935) and poll (RFC 8936) delivery, and OpenID Back-Channel Logout. Build, sign, deliver and validate security events between identity providers and relying parties. |
|
|
Abblix.SecurityEvents.CAEP
OpenID CAEP 1.0 (Continuous Access Evaluation Profile) event dictionary for .NET: typed models for session revoked, token claims change, credential change, assurance level change, device compliance change, session established, session presented and risk level change, over Abblix Security Events. |
|
|
Abblix.SecurityEvents.RISC
OpenID RISC 1.0 (Risk Incident Sharing and Coordination) event dictionary for .NET: typed models for credential compromise, account disabled, enabled and purged, identifier changed and recycled, opt-out and recovery events, over Abblix Security Events. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.4.0 | 282 | 9/5/2026 |
| 2.3.0 | 259 | 6/9/2026 |
| 2.2.0 | 425 | 2/18/2026 |
| 2.1.0 | 614 | 12/8/2025 |
| 2.0.1 | 703 | 12/1/2025 |
| 2.0.0 | 302 | 11/26/2025 |
| 1.6.0 | 381 | 8/14/2025 |
| 1.5.0 | 339 | 6/25/2025 |
| 1.4.0 | 392 | 4/9/2025 |
| 1.3.1 | 349 | 12/3/2024 |
| 1.3.0.1 | 283 | 11/28/2024 |
| 1.3.0 | 294 | 11/13/2024 |
| 1.2.0.1 | 289 | 10/16/2024 |
| 1.2.0 | 296 | 10/11/2024 |
| 1.1.0 | 401 | 7/9/2024 |
| 1.0.100 | 346 | 5/3/2024 |
Small types that keep protocol code readable. A result carries either a value or a typed error through a chain of checks, so a validator returns one thing and never throws for a bad input. An absolute address builder composes query strings safely; address and string extensions cover the cases that come up on the wire. Validation attributes check absolute addresses, allowed values and required elements at binding time. A challenge builder writes RFC 6750 authentication responses correctly escaped, and a sanitiser strips control characters before a value reaches a log. Secure random generation, Base32 and Base64URL encoding and custom JSON converters round it out. Full details: https://github.com/Abblix/Oidc.Server/releases/tag/v2.4