ToolUp.AuthProviders.Oidc.Shared
0.39.2
Prefix Reserved
dotnet add package ToolUp.AuthProviders.Oidc.Shared --version 0.39.2
NuGet\Install-Package ToolUp.AuthProviders.Oidc.Shared -Version 0.39.2
<PackageReference Include="ToolUp.AuthProviders.Oidc.Shared" Version="0.39.2" />
<PackageVersion Include="ToolUp.AuthProviders.Oidc.Shared" Version="0.39.2" />
<PackageReference Include="ToolUp.AuthProviders.Oidc.Shared" />
paket add ToolUp.AuthProviders.Oidc.Shared --version 0.39.2
#r "nuget: ToolUp.AuthProviders.Oidc.Shared, 0.39.2"
#:package ToolUp.AuthProviders.Oidc.Shared@0.39.2
#addin nuget:?package=ToolUp.AuthProviders.Oidc.Shared&version=0.39.2
#tool nuget:?package=ToolUp.AuthProviders.Oidc.Shared&version=0.39.2
ToolUp.AuthProviders.Oidc
Generic OIDC server-side IAuthProvider for ToolUp.Platform. Discovers JWKS via .well-known/openid-configuration, validates RS256 JWT bearer tokens against the discovered keys, and projects the resolved identity into AuthenticatedUser. Provider-agnostic — works against any OIDC-compliant issuer (Auth0, Cognito, Keycloak, etc.).
Key revocation window — read before deploying
By default this provider caches JWKS keys for 10 minutes and OIDC discovery metadata for 24 hours. So:
A signing key the issuer has revoked keeps validating tokens on a given instance for up to 10 minutes while the issuer is reachable, and for as long as JWKS fetches keep failing. Once a refresh is failing, the provider prefers serving the last-known-good key set over failing every sign-in — the window is then bounded by provider availability, not by the TTL.
That is a deliberate availability-over-revocation default, matching mainstream
OIDC libraries: an issuer blip should not take your application down. If your
threat model includes signing-key compromise, three opt-in knobs on
OidcHardening change it, and every one defaults to the behaviour above:
JwksCacheTtl— shorten the ordinary window.Some TimeSpan.Zerodisables the JWKS cache entirely: every validation re-fetches and nothing is served from cache, stale fallback included. That is the tightest window this provider offers, at one round-trip per validated request.FailClosedOnStaleJwks— bound the outage window: a failing refresh surfaces the error rather than serving possibly-revoked keys. Sign-in fails while the IdP is unreachable; that is the trade.JwksEvictionSignal— bound the window across instances. A fetch failure publishes aCustomNotificationon the platform-reserved scope; siblings subscribed viaOidcJwksCache.subscribeToEvictionsevict their own entry for that URL. Without it, a fleet's window is each instance's TTL measured independently. Requires a distributed notification channel — the in-process default reaches only the publishing process.
Not covered by any of them: per-token revocation. This provider does not
perform token introspection (RFC 7662); revocation is observed only through the
key set, so a revoked grant whose signing key is still published keeps
validating until the token's exp. Keep access-token lifetimes short.
Full guidance, including the wiring snippet for the cross-instance signal, is in the SDK's auth-providers companion documentation.
Server-rendered sign-in failure page (Phase 1139)
OidcSsrSignIn answers every sign-in failure (missing, expired or mismatched
state, an IdP error, a failed exchange, a refused token, a nonce mismatch, an
already-expired token) with one small HTML page: a plain-language reason from a
closed set, never IdP text, a token or an exception message, and a "Try again"
link back to SignInPath carrying the validated return URL. Status codes, the
no-cookie-on-failure rule and the open-redirect guard are unchanged; the page is
no-store.
Out of the box the page carries minimal inline styling. To take the deployment's theme, name a stylesheet:
let page = OidcSsrSignIn.SignInPage.defaults |> OidcSsrSignIn.SignInPage.withStylesheet "/theme.css"
app |> OidcSsrSignIn.withInteractiveSignInPage page http config
withStylesheet refuses anything that is not a local, rooted path (an absolute
URL, //host, whitespace, a quote, an angle bracket, a backtick or a backslash)
with ArgumentException at composition, so a bad value stops the boot. The
setting lives on SignInPage, not on OidcSsrSignInConfig: that record is
unchanged, so every existing construction of it (full literal or defaults with
{ ... with }) keeps compiling, and routes / withInteractiveSignIn keep
their signatures and use the default page. The inline style is dropped by a
strict style-src CSP; the page then renders unstyled, which is still readable.
Licensed under Apache-2.0.
Part of the ToolUp Platform SDK — see github.com/ToolUp-Forge/toolup-forge for full documentation.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- ToolUp.Platform.Client (>= 0.41.0)
- ToolUp.Platform.Core (>= 0.41.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on ToolUp.AuthProviders.Oidc.Shared:
| Package | Downloads |
|---|---|
|
ToolUp.AuthProviders.Oidc.Client
Client-side OIDC sign-in UI for ToolUp.Platform: Authorization Code + PKCE flow against any OIDC-compliant issuer. (Phase 11.C.5 unified the `.Client` suffix convention: `ToolUp.AuthProviders.OidcClient` -> `.Oidc.Client`, matching `ToolUp.AIProviders.Claude.Client`.) |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.39.2 | 132 | 11/7/2026 |
| 0.39.1 | 151 | 11/6/2026 |
| 0.39.0 | 121 | 11/4/2026 |
| 0.38.1 | 155 | 11/1/2026 |
| 0.38.0 | 118 | 10/31/2026 |
| 0.37.0 | 145 | 10/29/2026 |
| 0.36.0 | 130 | 10/29/2026 |
| 0.35.0 | 124 | 10/28/2026 |
| 0.34.1 | 121 | 10/27/2026 |
| 0.34.0 | 122 | 10/26/2026 |
| 0.33.0 | 112 | 10/25/2026 |
| 0.32.0 | 126 | 10/24/2026 |
| 0.31.0 | 132 | 10/22/2026 |
| 0.30.0 | 138 | 10/20/2026 |
| 0.29.0 | 116 | 10/19/2026 |
| 0.28.0 | 111 | 10/19/2026 |
| 0.27.0 | 152 | 10/16/2026 |
| 0.26.0 | 132 | 10/12/2026 |
| 0.25.1 | 130 | 10/9/2026 |
| 0.24.1 | 144 | 10/6/2026 |