Package dev.relism.flash.ext.oidc
Class OidcExtension
java.lang.Object
dev.relism.flash.ext.oidc.OidcExtension
- All Implemented Interfaces:
FlashExtension
Full OIDC Authorization Code + PKCE flow for Flash.
At provide(dev.relism.flash.extension.FlashContext), the extension:
- Fetches the provider discovery document — fail-fast at startup.
- Provides
OidcMiddlewareandJwtValidatorin the context. - Registers annotation processors for
Authenticated,RolesAllowedandScopesAllowed.
At routes(dev.relism.flash.extension.FlashRegistrar<?>, dev.relism.flash.extension.FlashContext), three routes are registered:
GET {prefix}/login— builds the authorization URL and redirects.GET {prefix}/callback— exchanges the code, creates a session, redirects.POST {prefix}/logout— invalidates the session, redirects to provider end-session endpoint (if available) or toOidcConfig.postLogoutRedirectUri().
// Keycloak
app.install(new OidcExtension(
OidcConfig.builder(
"https://keycloak.example.com/realms/myrealm",
"my-app", "secret", "/auth/callback")
.rolesClaimPath("realm_access.roles")
.build()));
// Two providers / tenants on one server
app.install(new OidcExtension(tenantAConfig))
.install(new OidcExtension(tenantBConfig));
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidprovide(FlashContext ctx) Phase 1 — register services and processors.voidroutes(FlashRegistrar<?> app, FlashContext ctx) Phase 2 — register routes.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface dev.relism.flash.extension.FlashExtension
priority
-
Constructor Details
-
OidcExtension
-
-
Method Details
-
provide
Description copied from interface:FlashExtensionPhase 1 — register services and processors. Safe:FlashContext.provide(java.lang.Class<T>, T),FlashContext.supply(java.lang.Class<T>, java.util.function.Supplier<T>),FlashContext.addAnnotationProcessor(dev.relism.flash.extension.AnnotationProcessor),FlashContext.addRouteListener(dev.relism.flash.extension.RouteListener). Unsafe:FlashContext.require(java.lang.Class<T>)(services not yet resolved).- Specified by:
providein interfaceFlashExtension
-
routes
Description copied from interface:FlashExtensionPhase 2 — register routes. All services are fully resolved.FlashContext.require(java.lang.Class<T>)is safe here.- Specified by:
routesin interfaceFlashExtension
-