Skip to content
Snippets Groups Projects
Commit 44f6911d authored by Dominik František Bučík's avatar Dominik František Bučík
Browse files

chore: merge branch 'fix_refresh_audience' into 'main'

fix: :bug: fix refresh auds for tokens via token exchange granter

See merge request !373
parents 52bb1c95 06053a3b
No related branches found
No related tags found
1 merge request!373fix: 🐛 fix refresh auds for tokens via token exchange granter
Pipeline #394348 passed
...@@ -154,16 +154,6 @@ public class OAuthTokenExchangeGranter extends BaseTokenExchangeGranter { ...@@ -154,16 +154,6 @@ public class OAuthTokenExchangeGranter extends BaseTokenExchangeGranter {
authenticationHolder = authenticationHolderRepository.save(authenticationHolder); authenticationHolder = authenticationHolderRepository.save(authenticationHolder);
token.setAuthenticationHolder(authenticationHolder); token.setAuthenticationHolder(authenticationHolder);
// attach a refresh token, if this client is allowed to request them and the user gets the offline scope
if (token.getScope().contains(OFFLINE_ACCESS)) {
if (client.isAllowRefresh()) {
OAuth2RefreshTokenEntity savedRefreshToken = createRefreshToken(client, token.getAuthenticationHolder());
token.setRefreshToken(savedRefreshToken);
} else {
throw new InvalidScopeException("Not authorized to request " + OFFLINE_ACCESS);
}
}
//Add approved site reference, if any //Add approved site reference, if any
OAuth2Request originalAuthRequest = subjectToken.getAuthenticationHolder().getAuthentication().getOAuth2Request(); OAuth2Request originalAuthRequest = subjectToken.getAuthenticationHolder().getAuthentication().getOAuth2Request();
if (originalAuthRequest.getExtensions() != null && originalAuthRequest.getExtensions().containsKey("approved_site")) { if (originalAuthRequest.getExtensions() != null && originalAuthRequest.getExtensions().containsKey("approved_site")) {
...@@ -199,6 +189,16 @@ public class OAuthTokenExchangeGranter extends BaseTokenExchangeGranter { ...@@ -199,6 +189,16 @@ public class OAuthTokenExchangeGranter extends BaseTokenExchangeGranter {
audiences.add(client.getClientId()); audiences.add(client.getClientId());
} }
// attach a refresh token, if this client is allowed to request them and the user gets the offline scope
if (token.getScope().contains(OFFLINE_ACCESS)) {
if (client.isAllowRefresh()) {
OAuth2RefreshTokenEntity savedRefreshToken = createRefreshToken(client, token.getAuthenticationHolder(), audiences);
token.setRefreshToken(savedRefreshToken);
} else {
throw new InvalidScopeException("Not authorized to request " + OFFLINE_ACCESS);
}
}
JWTClaimsSet originalJwtClaims; JWTClaimsSet originalJwtClaims;
try { try {
originalJwtClaims = subjectToken.getJwtValue().getJWTClaimsSet(); originalJwtClaims = subjectToken.getJwtValue().getJWTClaimsSet();
...@@ -250,7 +250,11 @@ public class OAuthTokenExchangeGranter extends BaseTokenExchangeGranter { ...@@ -250,7 +250,11 @@ public class OAuthTokenExchangeGranter extends BaseTokenExchangeGranter {
return true; return true;
} }
private OAuth2RefreshTokenEntity createRefreshToken(ClientDetailsEntity client, AuthenticationHolderEntity authHolder) { private OAuth2RefreshTokenEntity createRefreshToken(
ClientDetailsEntity client,
AuthenticationHolderEntity authHolder,
Set<String> resources
) {
OAuth2RefreshTokenEntity refreshToken = new OAuth2RefreshTokenEntity(); OAuth2RefreshTokenEntity refreshToken = new OAuth2RefreshTokenEntity();
JWTClaimsSet.Builder refreshClaims = new JWTClaimsSet.Builder(); JWTClaimsSet.Builder refreshClaims = new JWTClaimsSet.Builder();
...@@ -265,11 +269,16 @@ public class OAuthTokenExchangeGranter extends BaseTokenExchangeGranter { ...@@ -265,11 +269,16 @@ public class OAuthTokenExchangeGranter extends BaseTokenExchangeGranter {
refreshClaims.jwtID(UUID.randomUUID().toString()); refreshClaims.jwtID(UUID.randomUUID().toString());
refreshClaims.issuer(config.getConfigBean().getIssuer()); refreshClaims.issuer(config.getConfigBean().getIssuer());
String audience = client.getClientId(); if (resources == null || resources.isEmpty()) {
if (!Strings.isNullOrEmpty(audience)) { String audience = client.getClientId();
refreshClaims.audience(Lists.newArrayList(audience)); if (!Strings.isNullOrEmpty(audience)) {
refreshClaims.audience(Lists.newArrayList(audience));
}
} else {
refreshClaims.audience(Lists.newArrayList(resources));
} }
JWTClaimsSet claims = refreshClaims.build(); JWTClaimsSet claims = refreshClaims.build();
JWSAlgorithm signingAlg = jwtService.getDefaultSigningAlgorithm(); JWSAlgorithm signingAlg = jwtService.getDefaultSigningAlgorithm();
JWSHeader header = new JWSHeader(signingAlg, JOSEObjectType.JWT, null, null, null, null, null, null, null, null, JWSHeader header = new JWSHeader(signingAlg, JOSEObjectType.JWT, null, null, null, null, null, null, null, null,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment