Class AbstractTokenExchangeProvider

java.lang.Object
org.keycloak.protocol.oidc.tokenexchange.AbstractTokenExchangeProvider
All Implemented Interfaces:
TokenExchangeProvider, Provider
Direct Known Subclasses:
FederatedTokenExchangeProvider, StandardTokenExchangeProvider, SubjectImpersonationTokenExchangeProvider, V1TokenExchangeProvider

public abstract class AbstractTokenExchangeProvider extends Object implements TokenExchangeProvider
Base token exchange implementation. For now for both V1 and V2 token exchange (may change in the follow-up commits)
Author:
Dmitry Telegin
  • Field Details

  • Constructor Details

    • AbstractTokenExchangeProvider

      public AbstractTokenExchangeProvider()
  • Method Details

    • exchange

      public jakarta.ws.rs.core.Response exchange(TokenExchangeContext context)
      Description copied from interface: TokenExchangeProvider
      Exchange the token.
      Specified by:
      exchange in interface TokenExchangeProvider
      Returns:
      response with a new token
    • close

      public void close()
      Specified by:
      close in interface Provider
    • tokenExchange

      protected abstract jakarta.ws.rs.core.Response tokenExchange()
    • isExternalInternalTokenExchangeRequest

      protected boolean isExternalInternalTokenExchangeRequest(TokenExchangeContext context)
      Is it the request for external-internal token exchange?
    • getSubjectIssuer

      protected String getSubjectIssuer(TokenExchangeContext context, String subjectToken, String subjectTokenType)
    • exchangeToIdentityProvider

      protected jakarta.ws.rs.core.Response exchangeToIdentityProvider(UserModel targetUser, UserSessionModel targetUserSession, String requestedIssuer)
    • getRequestedTokenType

      protected String getRequestedTokenType()
    • getTargetAudienceClients

      protected List<ClientModel> getTargetAudienceClients()
    • validateAudience

      protected void validateAudience(AccessToken token, boolean disallowOnHolderOfTokenMismatch, List<ClientModel> targetAudienceClients)
    • exchangeClientToClient

      protected jakarta.ws.rs.core.Response exchangeClientToClient(UserModel targetUser, UserSessionModel targetUserSession, AccessToken token, boolean disallowOnHolderOfTokenMismatch)
    • forbiddenIfClientIsNotWithinTokenAudience

      protected void forbiddenIfClientIsNotWithinTokenAudience(AccessToken token)
    • forbiddenIfClientIsNotTokenHolder

      protected void forbiddenIfClientIsNotTokenHolder(boolean disallowOnHolderOfTokenMismatch, ClientModel tokenHolder)
    • getSupportedOAuthResponseTokenTypes

      protected List<String> getSupportedOAuthResponseTokenTypes()
    • createSessionModel

      protected AuthenticationSessionModel createSessionModel(UserSessionModel targetUserSession, RootAuthenticationSessionModel rootAuthSession, UserModel targetUser, ClientModel client, String scope)
    • getRequestedScope

      protected String getRequestedScope(AccessToken token, List<ClientModel> targetAudienceClients)
    • setClientToContext

      protected void setClientToContext(List<ClientModel> targetAudienceClients)
    • getTargetClient

      protected ClientModel getTargetClient(List<ClientModel> targetAudienceClients)
    • exchangeClientToOIDCClient

      protected jakarta.ws.rs.core.Response exchangeClientToOIDCClient(UserModel targetUser, UserSessionModel targetUserSession, String requestedTokenType, List<ClientModel> targetAudienceClients, String scope)
    • exchangeClientToSAML2Client

      protected jakarta.ws.rs.core.Response exchangeClientToSAML2Client(UserModel targetUser, UserSessionModel targetUserSession, String requestedTokenType, List<ClientModel> targetAudienceClients)
    • exchangeExternalToken

      protected jakarta.ws.rs.core.Response exchangeExternalToken(String subjectIssuer, String subjectToken)
    • importUserFromExternalIdentity

      protected UserModel importUserFromExternalIdentity(BrokeredIdentityContext context)
    • updateUserSessionFromClientAuth

      protected void updateUserSessionFromClientAuth(UserSessionModel userSession)