Class AbstractTokenExchangeProvider
java.lang.Object
org.keycloak.protocol.oidc.tokenexchange.AbstractTokenExchangeProvider
- All Implemented Interfaces:
org.keycloak.protocol.oidc.TokenExchangeProvider,org.keycloak.provider.Provider
- Direct Known Subclasses:
StandardTokenExchangeProvider,V1TokenExchangeProvider
public abstract class AbstractTokenExchangeProvider
extends Object
implements org.keycloak.protocol.oidc.TokenExchangeProvider
Base token exchange implementation. For now for both V1 and V2 token exchange (may change in the follow-up commits)
- Author:
- Dmitry Telegin
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static final record -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected org.keycloak.models.ClientModelprotected org.keycloak.common.ClientConnectionprotected org.keycloak.protocol.oidc.TokenExchangeContextprotected org.keycloak.services.cors.Corsprotected org.keycloak.events.EventBuilderprotected jakarta.ws.rs.core.HttpHeadersprotected org.keycloak.protocol.oidc.TokenExchangeContext.Paramsprotected org.keycloak.models.RealmModelprotected org.keycloak.models.KeycloakSessionprotected TokenManager -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()protected org.keycloak.sessions.AuthenticationSessionModelcreateSessionModel(org.keycloak.models.UserSessionModel targetUserSession, org.keycloak.sessions.RootAuthenticationSessionModel rootAuthSession, org.keycloak.models.UserModel targetUser, org.keycloak.models.ClientModel client, String scope) jakarta.ws.rs.core.Responseexchange(org.keycloak.protocol.oidc.TokenExchangeContext context) protected jakarta.ws.rs.core.ResponseexchangeClientToClient(org.keycloak.models.UserModel targetUser, org.keycloak.models.UserSessionModel targetUserSession, org.keycloak.representations.AccessToken token, boolean disallowOnHolderOfTokenMismatch) protected abstract jakarta.ws.rs.core.ResponseexchangeClientToOIDCClient(org.keycloak.models.UserModel targetUser, org.keycloak.models.UserSessionModel targetUserSession, String requestedTokenType, List<org.keycloak.models.ClientModel> targetAudienceClients, String scope, org.keycloak.representations.AccessToken subjectToken) protected abstract jakarta.ws.rs.core.ResponseexchangeClientToSAML2Client(org.keycloak.models.UserModel targetUser, org.keycloak.models.UserSessionModel targetUserSession, String requestedTokenType, List<org.keycloak.models.ClientModel> targetAudienceClients) protected jakarta.ws.rs.core.ResponseexchangeExternalToken(String subjectIssuer, String subjectToken) protected jakarta.ws.rs.core.ResponseexchangeToIdentityProvider(org.keycloak.models.UserModel targetUser, org.keycloak.models.UserSessionModel targetUserSession, String requestedIssuer) protected voidforbiddenIfClientIsNotTokenHolder(boolean disallowOnHolderOfTokenMismatch, org.keycloak.models.ClientModel tokenHolder) protected voidforbiddenIfClientIsNotWithinTokenAudience(org.keycloak.representations.AccessToken token) protected abstract StringgetRequestedScope(org.keycloak.representations.AccessToken token, List<org.keycloak.models.ClientModel> targetAudienceClients) protected abstract Stringprotected StringgetSubjectIssuer(org.keycloak.protocol.oidc.TokenExchangeContext context, String subjectToken, String subjectTokenType) protected List<org.keycloak.models.ClientModel>protected org.keycloak.models.UserModelimportUserFromExternalIdentity(org.keycloak.broker.provider.BrokeredIdentityContext context) protected booleanisExternalInternalTokenExchangeRequest(org.keycloak.protocol.oidc.TokenExchangeContext context) Is it the request for external-internal token exchange?protected voidsetClientToContext(List<org.keycloak.models.ClientModel> targetAudienceClients) protected abstract jakarta.ws.rs.core.Responseprotected voidupdateUserSessionFromClientAuth(org.keycloak.models.UserSessionModel userSession) protected abstract voidvalidateAudience(org.keycloak.representations.AccessToken token, boolean disallowOnHolderOfTokenMismatch, List<org.keycloak.models.ClientModel> targetAudienceClients) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.keycloak.protocol.oidc.TokenExchangeProvider
supports
-
Field Details
-
params
protected org.keycloak.protocol.oidc.TokenExchangeContext.Params params -
formParams
-
session
protected org.keycloak.models.KeycloakSession session -
cors
protected org.keycloak.services.cors.Cors cors -
realm
protected org.keycloak.models.RealmModel realm -
client
protected org.keycloak.models.ClientModel client -
event
protected org.keycloak.events.EventBuilder event -
clientConnection
protected org.keycloak.common.ClientConnection clientConnection -
headers
protected jakarta.ws.rs.core.HttpHeaders headers -
tokenManager
-
clientAuthAttributes
-
context
protected org.keycloak.protocol.oidc.TokenExchangeContext context
-
-
Constructor Details
-
AbstractTokenExchangeProvider
public AbstractTokenExchangeProvider()
-
-
Method Details
-
exchange
public jakarta.ws.rs.core.Response exchange(org.keycloak.protocol.oidc.TokenExchangeContext context) - Specified by:
exchangein interfaceorg.keycloak.protocol.oidc.TokenExchangeProvider
-
close
public void close()- Specified by:
closein interfaceorg.keycloak.provider.Provider
-
tokenExchange
protected abstract jakarta.ws.rs.core.Response tokenExchange() -
isExternalInternalTokenExchangeRequest
protected boolean isExternalInternalTokenExchangeRequest(org.keycloak.protocol.oidc.TokenExchangeContext context) Is it the request for external-internal token exchange? -
getSubjectIssuer
-
exchangeToIdentityProvider
protected jakarta.ws.rs.core.Response exchangeToIdentityProvider(org.keycloak.models.UserModel targetUser, org.keycloak.models.UserSessionModel targetUserSession, String requestedIssuer) -
getRequestedTokenType
-
getTargetAudienceClients
-
validateAudience
protected abstract void validateAudience(org.keycloak.representations.AccessToken token, boolean disallowOnHolderOfTokenMismatch, List<org.keycloak.models.ClientModel> targetAudienceClients) -
exchangeClientToClient
protected jakarta.ws.rs.core.Response exchangeClientToClient(org.keycloak.models.UserModel targetUser, org.keycloak.models.UserSessionModel targetUserSession, org.keycloak.representations.AccessToken token, boolean disallowOnHolderOfTokenMismatch) -
forbiddenIfClientIsNotWithinTokenAudience
protected void forbiddenIfClientIsNotWithinTokenAudience(org.keycloak.representations.AccessToken token) -
forbiddenIfClientIsNotTokenHolder
protected void forbiddenIfClientIsNotTokenHolder(boolean disallowOnHolderOfTokenMismatch, org.keycloak.models.ClientModel tokenHolder) -
getSupportedOAuthResponseTokenTypes
-
createSessionModel
protected org.keycloak.sessions.AuthenticationSessionModel createSessionModel(org.keycloak.models.UserSessionModel targetUserSession, org.keycloak.sessions.RootAuthenticationSessionModel rootAuthSession, org.keycloak.models.UserModel targetUser, org.keycloak.models.ClientModel client, String scope) -
getRequestedScope
-
setClientToContext
-
exchangeClientToOIDCClient
protected abstract jakarta.ws.rs.core.Response exchangeClientToOIDCClient(org.keycloak.models.UserModel targetUser, org.keycloak.models.UserSessionModel targetUserSession, String requestedTokenType, List<org.keycloak.models.ClientModel> targetAudienceClients, String scope, org.keycloak.representations.AccessToken subjectToken) -
exchangeClientToSAML2Client
-
exchangeExternalToken
-
importUserFromExternalIdentity
protected org.keycloak.models.UserModel importUserFromExternalIdentity(org.keycloak.broker.provider.BrokeredIdentityContext context) -
updateUserSessionFromClientAuth
protected void updateUserSessionFromClientAuth(org.keycloak.models.UserSessionModel userSession) -
locateExchangeExternalTokenByAlias
protected AbstractTokenExchangeProvider.ExternalExchangeContext locateExchangeExternalTokenByAlias(String alias)
-