Package org.keycloak.broker.oidc
Class AbstractOAuth2IdentityProvider<C extends OAuth2IdentityProviderConfig>
java.lang.Object
org.keycloak.broker.provider.AbstractIdentityProvider<C>
org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider<C>
- All Implemented Interfaces:
ExchangeExternalToken,ExchangeTokenToIdentityProviderToken,IdentityProvider<C>,Provider
- Direct Known Subclasses:
BitbucketIdentityProvider,FacebookIdentityProvider,GitHubIdentityProvider,InstagramIdentityProvider,MicrosoftIdentityProvider,OAuth2IdentityProvider,OIDCIdentityProvider,OpenshiftV4IdentityProvider,PayPalIdentityProvider,StackoverflowIdentityProvider
public abstract class AbstractOAuth2IdentityProvider<C extends OAuth2IdentityProviderConfig>
extends AbstractIdentityProvider<C>
implements ExchangeTokenToIdentityProviderToken, ExchangeExternalToken
- Author:
- Pedro Igor
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface org.keycloak.broker.provider.IdentityProvider
IdentityProvider.AuthenticationCallback -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final Stringstatic final Stringprotected static final org.jboss.logging.Loggerprotected static com.fasterxml.jackson.databind.ObjectMapperstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final StringFields inherited from class org.keycloak.broker.provider.AbstractIdentityProvider
ACCOUNT_LINK_URL, BROKER_REGISTERED_NEW_USER, session, UPDATE_PROFILE_EMAIL_CHANGED, UPDATE_PROFILE_USERNAME_CHANGEDFields inherited from interface org.keycloak.broker.provider.IdentityProvider
EXTERNAL_IDENTITY_PROVIDER, FEDERATED_ACCESS_TOKEN -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncom.fasterxml.jackson.databind.JsonNodeasJsonNode(String json) authenticateTokenRequest(SimpleHttp tokenRequest) voidauthenticationFinished(AuthenticationSessionModel authSession, BrokeredIdentityContext context) protected SimpleHttpbuildUserInfoRequest(String subjectToken, String userInfoUrl) callback(RealmModel realm, IdentityProvider.AuthenticationCallback callback, EventBuilder event) protected jakarta.ws.rs.core.UriBuilderprotected BrokeredIdentityContextdoGetFederatedIdentity(String accessToken) final BrokeredIdentityContextexchangeExternal(TokenExchangeProvider tokenExchangeProvider, TokenExchangeContext tokenExchangeContext) voidexchangeExternalComplete(UserSessionModel userSession, BrokeredIdentityContext context, jakarta.ws.rs.core.MultivaluedMap<String, String> params) protected BrokeredIdentityContextexchangeExternalTokenV1Impl(EventBuilder event, jakarta.ws.rs.core.MultivaluedMap<String, String> params) Usage with token-exchange V1protected BrokeredIdentityContextexchangeExternalTokenV2Impl(TokenExchangeContext tokenExchangeContext) Usage with external-internal token-exchange v2.protected BrokeredIdentityContextexchangeExternalUserInfoValidationOnly(EventBuilder event, jakarta.ws.rs.core.MultivaluedMap<String, String> params) jakarta.ws.rs.core.ResponseexchangeFromToken(jakarta.ws.rs.core.UriInfo uriInfo, EventBuilder event, ClientModel authorizedClient, UserSessionModel tokenUserSession, UserModel tokenSubject, jakarta.ws.rs.core.MultivaluedMap<String, String> params) protected jakarta.ws.rs.core.ResponseexchangeSessionToken(jakarta.ws.rs.core.UriInfo uriInfo, EventBuilder event, ClientModel authorizedClient, UserSessionModel tokenUserSession, UserModel tokenSubject) protected jakarta.ws.rs.core.ResponseexchangeStoredToken(jakarta.ws.rs.core.UriInfo uriInfo, EventBuilder event, ClientModel authorizedClient, UserSessionModel tokenUserSession, UserModel tokenSubject) protected BrokeredIdentityContextextractIdentityFromProfile(EventBuilder event, com.fasterxml.jackson.databind.JsonNode node) protected StringextractTokenFromResponse(String response, String tokenName) protected JsonWebTokenprotected Stringprotected abstract StringgetFederatedIdentity(String response) getJsonProperty(com.fasterxml.jackson.databind.JsonNode jsonNode, String name) Get JSON property as text.protected Stringprotected SignatureSignerContextprotected jakarta.ws.rs.core.ResponsehasExternalExchangeToken(EventBuilder event, UserSessionModel tokenUserSession, jakarta.ws.rs.core.MultivaluedMap<String, String> params) check to see if we have a token exchange in session in other words check to see if this session was created by an external exchangebooleanjakarta.ws.rs.core.ResponseperformLogin(AuthenticationRequest request) jakarta.ws.rs.core.ResponseretrieveToken(KeycloakSession session, FederatedIdentityModel identity) protected booleanbooleanprotected BrokeredIdentityContextvalidateExternalTokenThroughUserInfo(EventBuilder event, String subjectToken, String subjectTokenType) Methods inherited from class org.keycloak.broker.provider.AbstractIdentityProvider
backchannelLogout, close, exchangeErrorResponse, exchangeNotLinked, exchangeNotLinkedNoStore, exchangeNotSupported, exchangeTokenExpired, exchangeUnsupportedRequiredType, export, getLinkingUrl, getMarshaller, importNewUser, keycloakInitiatedBrowserLogout, preprocessFederatedIdentity, setEmailVerified, updateBrokeredUser, updateEmailMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.keycloak.broker.provider.IdentityProvider
isMapperSupported, reloadKeys
-
Field Details
-
logger
protected static final org.jboss.logging.Logger logger -
OAUTH2_GRANT_TYPE_REFRESH_TOKEN
- See Also:
-
OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE
- See Also:
-
FEDERATED_REFRESH_TOKEN
- See Also:
-
FEDERATED_TOKEN_EXPIRATION
- See Also:
-
ACCESS_DENIED
- See Also:
-
mapper
protected static com.fasterxml.jackson.databind.ObjectMapper mapper -
OAUTH2_PARAMETER_ACCESS_TOKEN
- See Also:
-
OAUTH2_PARAMETER_SCOPE
- See Also:
-
OAUTH2_PARAMETER_STATE
- See Also:
-
OAUTH2_PARAMETER_RESPONSE_TYPE
- See Also:
-
OAUTH2_PARAMETER_REDIRECT_URI
- See Also:
-
OAUTH2_PARAMETER_CODE
- See Also:
-
OAUTH2_PARAMETER_CLIENT_ID
- See Also:
-
OAUTH2_PARAMETER_CLIENT_SECRET
- See Also:
-
OAUTH2_PARAMETER_GRANT_TYPE
- See Also:
-
-
Constructor Details
-
AbstractOAuth2IdentityProvider
-
-
Method Details
-
callback
public Object callback(RealmModel realm, IdentityProvider.AuthenticationCallback callback, EventBuilder event) - Specified by:
callbackin interfaceIdentityProvider<C extends OAuth2IdentityProviderConfig>- Overrides:
callbackin classAbstractIdentityProvider<C extends OAuth2IdentityProviderConfig>
-
performLogin
- Specified by:
performLoginin interfaceIdentityProvider<C extends OAuth2IdentityProviderConfig>- Overrides:
performLoginin classAbstractIdentityProvider<C extends OAuth2IdentityProviderConfig>
-
retrieveToken
public jakarta.ws.rs.core.Response retrieveToken(KeycloakSession session, FederatedIdentityModel identity) - Specified by:
retrieveTokenin interfaceIdentityProvider<C extends OAuth2IdentityProviderConfig>
-
getConfig
- Specified by:
getConfigin interfaceIdentityProvider<C extends OAuth2IdentityProviderConfig>- Overrides:
getConfigin classAbstractIdentityProvider<C extends OAuth2IdentityProviderConfig>
-
extractTokenFromResponse
-
exchangeFromToken
public jakarta.ws.rs.core.Response exchangeFromToken(jakarta.ws.rs.core.UriInfo uriInfo, EventBuilder event, ClientModel authorizedClient, UserSessionModel tokenUserSession, UserModel tokenSubject, jakarta.ws.rs.core.MultivaluedMap<String, String> params) - Specified by:
exchangeFromTokenin interfaceExchangeTokenToIdentityProviderToken
-
hasExternalExchangeToken
protected jakarta.ws.rs.core.Response hasExternalExchangeToken(EventBuilder event, UserSessionModel tokenUserSession, jakarta.ws.rs.core.MultivaluedMap<String, String> params) check to see if we have a token exchange in session in other words check to see if this session was created by an external exchange- Parameters:
tokenUserSession-params-- Returns:
-
exchangeStoredToken
protected jakarta.ws.rs.core.Response exchangeStoredToken(jakarta.ws.rs.core.UriInfo uriInfo, EventBuilder event, ClientModel authorizedClient, UserSessionModel tokenUserSession, UserModel tokenSubject) -
exchangeSessionToken
protected jakarta.ws.rs.core.Response exchangeSessionToken(jakarta.ws.rs.core.UriInfo uriInfo, EventBuilder event, ClientModel authorizedClient, UserSessionModel tokenUserSession, UserModel tokenSubject) -
getFederatedIdentity
-
getAccessTokenResponseParameter
-
doGetFederatedIdentity
-
createAuthorizationUrl
-
getJsonProperty
Get JSON property as text. JSON numbers and booleans are converted to text. Empty string is converted to null.- Parameters:
jsonNode- to get property fromname- of property to get- Returns:
- string value of the property or null.
-
asJsonNode
- Throws:
IOException
-
getDefaultScopes
-
authenticationFinished
public void authenticationFinished(AuthenticationSessionModel authSession, BrokeredIdentityContext context) - Specified by:
authenticationFinishedin interfaceIdentityProvider<C extends OAuth2IdentityProviderConfig>- Overrides:
authenticationFinishedin classAbstractIdentityProvider<C extends OAuth2IdentityProviderConfig>
-
authenticateTokenRequest
-
generateToken
-
getSignatureContext
-
getProfileEndpointForValidation
-
extractIdentityFromProfile
protected BrokeredIdentityContext extractIdentityFromProfile(EventBuilder event, com.fasterxml.jackson.databind.JsonNode node) -
validateExternalTokenThroughUserInfo
protected BrokeredIdentityContext validateExternalTokenThroughUserInfo(EventBuilder event, String subjectToken, String subjectTokenType) -
buildUserInfoRequest
-
supportsExternalExchange
protected boolean supportsExternalExchange() -
isIssuer
- Specified by:
isIssuerin interfaceExchangeExternalToken
-
exchangeExternal
public final BrokeredIdentityContext exchangeExternal(TokenExchangeProvider tokenExchangeProvider, TokenExchangeContext tokenExchangeContext) - Specified by:
exchangeExternalin interfaceExchangeExternalToken
-
exchangeExternalTokenV1Impl
protected BrokeredIdentityContext exchangeExternalTokenV1Impl(EventBuilder event, jakarta.ws.rs.core.MultivaluedMap<String, String> params) Usage with token-exchange V1- Parameters:
event- event builderparams- parameters of the token-exchange request- Returns:
- brokered identity context with the details about user from the IDP
-
exchangeExternalTokenV2Impl
protected BrokeredIdentityContext exchangeExternalTokenV2Impl(TokenExchangeContext tokenExchangeContext) Usage with external-internal token-exchange v2.- Parameters:
tokenExchangeContext- data about token-exchange request- Returns:
- brokered identity context with the details about user from the IDP
-
exchangeExternalUserInfoValidationOnly
protected BrokeredIdentityContext exchangeExternalUserInfoValidationOnly(EventBuilder event, jakarta.ws.rs.core.MultivaluedMap<String, String> params) -
exchangeExternalComplete
public void exchangeExternalComplete(UserSessionModel userSession, BrokeredIdentityContext context, jakarta.ws.rs.core.MultivaluedMap<String, String> params) - Specified by:
exchangeExternalCompletein interfaceExchangeExternalToken
-
supportsLongStateParameter
public boolean supportsLongStateParameter()- Specified by:
supportsLongStateParameterin interfaceIdentityProvider<C extends OAuth2IdentityProviderConfig>
-