220         FederatedIdentityModel model = session.users().getFederatedIdentity(tokenSubject, 
getConfig().getAlias(), authorizedClient.getRealm());
   221         if (model == null || model.getToken() == null) {
   222             event.detail(Details.REASON, 
"requested_issuer is not linked");
   223             event.error(Errors.INVALID_TOKEN);
   224             return exchangeNotLinked(uriInfo, authorizedClient, tokenUserSession, tokenSubject);
   227             String modelTokenString = model.getToken();
   228             AccessTokenResponse tokenResponse = JsonSerialization.readValue(modelTokenString, AccessTokenResponse.class);
   230             if (exp != null && exp < Time.currentTime()) {
   231                 if (tokenResponse.getRefreshToken() == null) {
   232                     return exchangeTokenExpired(uriInfo, authorizedClient, tokenUserSession, tokenSubject);
   234                 String response = SimpleHttp.doPost(
getConfig().getTokenUrl(), session)
   235                         .param(
"refresh_token", tokenResponse.getRefreshToken())
   239                 if (response.contains(
"error")) {
   240                     logger.debugv(
"Error refreshing token, refresh token expiration?: {0}", response);
   241                     model.setToken(null);
   242                     session.users().updateFederatedIdentity(authorizedClient.getRealm(), tokenSubject, model);
   243                     event.detail(Details.REASON, 
"requested_issuer token expired");
   244                     event.error(Errors.INVALID_TOKEN);
   245                     return exchangeTokenExpired(uriInfo, authorizedClient, tokenUserSession, tokenSubject);
   247                 AccessTokenResponse newResponse = JsonSerialization.readValue(response, AccessTokenResponse.class);
   248                 if (newResponse.getExpiresIn() > 0) {
   249                     int accessTokenExpiration = Time.currentTime() + (int) newResponse.getExpiresIn();
   251                     response = JsonSerialization.writeValueAsString(newResponse);
   253                 String oldToken = tokenUserSession.getNote(FEDERATED_ACCESS_TOKEN);
   254                 if (oldToken != null && oldToken.equals(tokenResponse.getToken())) {
   255                     int accessTokenExpiration = newResponse.getExpiresIn() > 0 ? Time.currentTime() + (int) newResponse.getExpiresIn() : 0;
   258                     tokenUserSession.setNote(FEDERATED_ACCESS_TOKEN, newResponse.getToken());
   262                 model.setToken(response);
   263                 tokenResponse = newResponse;
   264             } 
else if (exp != null) {
   265                 tokenResponse.setExpiresIn(exp - Time.currentTime());
   267             tokenResponse.setIdToken(null);
   268             tokenResponse.setRefreshToken(null);
   269             tokenResponse.setRefreshExpiresIn(0);
   270             tokenResponse.getOtherClaims().clear();
   271             tokenResponse.getOtherClaims().put(OAuth2Constants.ISSUED_TOKEN_TYPE, OAuth2Constants.ACCESS_TOKEN_TYPE);
   272             tokenResponse.getOtherClaims().put(ACCOUNT_LINK_URL, getLinkingUrl(uriInfo, authorizedClient, tokenUserSession));
   274             return Response.ok(tokenResponse).type(MediaType.APPLICATION_JSON_TYPE).build();
   275         } 
catch (IOException e) {
   276             throw new RuntimeException(e);
 static final String OAUTH2_PARAMETER_CLIENT_ID
Definition: AbstractOAuth2IdentityProvider.java:91
 
C getConfig()
Definition: AbstractOAuth2IdentityProvider.java:126
 
static final String FEDERATED_ID_TOKEN
Definition: OIDCIdentityProvider.java:74
 
static final String FEDERATED_REFRESH_TOKEN
Definition: AbstractOAuth2IdentityProvider.java:80
 
static final Logger logger
Definition: OIDCIdentityProvider.java:71
 
static final String OAUTH2_PARAMETER_CLIENT_SECRET
Definition: AbstractOAuth2IdentityProvider.java:92
 
static final String ACCESS_TOKEN_EXPIRATION
Definition: OIDCIdentityProvider.java:78
 
static final String OAUTH2_PARAMETER_GRANT_TYPE
Definition: AbstractOAuth2IdentityProvider.java:93
 
static final String OAUTH2_GRANT_TYPE_REFRESH_TOKEN
Definition: AbstractOAuth2IdentityProvider.java:77
 
static final String FEDERATED_TOKEN_EXPIRATION
Definition: AbstractOAuth2IdentityProvider.java:81