|
|
|
@ -165,7 +165,7 @@ public final class OAuth2RefreshTokenAuthenticationProvider implements Authentic |
|
|
|
Jwt dPoPProof = DPoPProofVerifier.verifyIfAvailable(refreshTokenAuthentication); |
|
|
|
Jwt dPoPProof = DPoPProofVerifier.verifyIfAvailable(refreshTokenAuthentication); |
|
|
|
|
|
|
|
|
|
|
|
if (dPoPProof != null |
|
|
|
if (dPoPProof != null |
|
|
|
& clientPrincipal.getClientAuthenticationMethod().equals(ClientAuthenticationMethod.NONE)) { |
|
|
|
&& clientPrincipal.getClientAuthenticationMethod().equals(ClientAuthenticationMethod.NONE)) { |
|
|
|
// For public clients, verify the DPoP Proof public key is same as (current)
|
|
|
|
// For public clients, verify the DPoP Proof public key is same as (current)
|
|
|
|
// access token public key binding
|
|
|
|
// access token public key binding
|
|
|
|
Map<String, Object> accessTokenClaims = authorization.getAccessToken().getClaims(); |
|
|
|
Map<String, Object> accessTokenClaims = authorization.getAccessToken().getClaims(); |
|
|
|
@ -215,7 +215,10 @@ public final class OAuth2RefreshTokenAuthenticationProvider implements Authentic |
|
|
|
// ----- Refresh token -----
|
|
|
|
// ----- Refresh token -----
|
|
|
|
OAuth2RefreshToken currentRefreshToken = refreshToken.getToken(); |
|
|
|
OAuth2RefreshToken currentRefreshToken = refreshToken.getToken(); |
|
|
|
if (!registeredClient.getTokenSettings().isReuseRefreshTokens()) { |
|
|
|
if (!registeredClient.getTokenSettings().isReuseRefreshTokens()) { |
|
|
|
tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.REFRESH_TOKEN).build(); |
|
|
|
tokenContext = tokenContextBuilder |
|
|
|
|
|
|
|
.tokenType(OAuth2TokenType.REFRESH_TOKEN) |
|
|
|
|
|
|
|
.authorization(authorizationBuilder.build()) // allows refresh token to retrieve access token
|
|
|
|
|
|
|
|
.build(); |
|
|
|
OAuth2Token generatedRefreshToken = this.tokenGenerator.generate(tokenContext); |
|
|
|
OAuth2Token generatedRefreshToken = this.tokenGenerator.generate(tokenContext); |
|
|
|
if (!(generatedRefreshToken instanceof OAuth2RefreshToken)) { |
|
|
|
if (!(generatedRefreshToken instanceof OAuth2RefreshToken)) { |
|
|
|
OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, |
|
|
|
OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, |
|
|
|
@ -253,8 +256,8 @@ public final class OAuth2RefreshTokenAuthenticationProvider implements Authentic |
|
|
|
|
|
|
|
|
|
|
|
idToken = new OidcIdToken(generatedIdToken.getTokenValue(), generatedIdToken.getIssuedAt(), |
|
|
|
idToken = new OidcIdToken(generatedIdToken.getTokenValue(), generatedIdToken.getIssuedAt(), |
|
|
|
generatedIdToken.getExpiresAt(), ((Jwt) generatedIdToken).getClaims()); |
|
|
|
generatedIdToken.getExpiresAt(), ((Jwt) generatedIdToken).getClaims()); |
|
|
|
authorizationBuilder.token(idToken, |
|
|
|
authorizationBuilder.token(idToken, metadata -> |
|
|
|
(metadata) -> metadata.put(OAuth2Authorization.Token.CLAIMS_METADATA_NAME, idToken.getClaims())); |
|
|
|
metadata.put(OAuth2Authorization.Token.CLAIMS_METADATA_NAME, idToken.getClaims())); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
|
idToken = null; |
|
|
|
idToken = null; |
|
|
|
|