use of io.gravitee.am.model.TokenClaim in project gravitee-access-management by gravitee-io.
the class TokenServiceImpl method enhanceJWT.
private void enhanceJWT(JWT jwt, List<TokenClaim> customClaims, TokenTypeHint tokenTypeHint, ExecutionContext executionContext) {
if (customClaims != null && !customClaims.isEmpty()) {
customClaims.stream().filter(tokenClaim -> tokenTypeHint.equals(tokenClaim.getTokenType())).forEach(tokenClaim -> {
try {
String claimName = tokenClaim.getClaimName();
String claimExpression = tokenClaim.getClaimValue();
Object extValue = (claimExpression != null) ? executionContext.getTemplateEngine().getValue(claimExpression, Object.class) : null;
if (extValue != null) {
jwt.put(claimName, extValue);
}
} catch (Exception ex) {
logger.debug("An error occurs while parsing expression language : {}", tokenClaim.getClaimValue(), ex);
}
});
}
}
use of io.gravitee.am.model.TokenClaim in project gravitee-access-management by gravitee-io.
the class IDTokenServiceTest method shouldCreateIDToken_customClaims.
@Test
public void shouldCreateIDToken_customClaims() {
OAuth2Request oAuth2Request = new OAuth2Request();
oAuth2Request.setClientId("client-id");
oAuth2Request.setScopes(Collections.singleton("openid"));
TokenClaim customClaim = new TokenClaim();
customClaim.setTokenType(TokenTypeHint.ID_TOKEN);
customClaim.setClaimName("iss");
customClaim.setClaimValue("https://custom-iss");
Client client = new Client();
client.setCertificate("certificate-client");
client.setClientId("my-client-id");
client.setTokenCustomClaims(Arrays.asList(customClaim));
ExecutionContext executionContext = mock(ExecutionContext.class);
TemplateEngine templateEngine = mock(TemplateEngine.class);
when(templateEngine.getValue("https://custom-iss", Object.class)).thenReturn("https://custom-iss");
when(executionContext.getTemplateEngine()).thenReturn(templateEngine);
String idTokenPayload = "payload";
io.gravitee.am.gateway.certificate.CertificateProvider defaultCert = new io.gravitee.am.gateway.certificate.CertificateProvider(defaultCertificateProvider);
ArgumentCaptor<JWT> jwtCaptor = ArgumentCaptor.forClass(JWT.class);
when(jwtService.encode(jwtCaptor.capture(), any(io.gravitee.am.gateway.certificate.CertificateProvider.class))).thenReturn(Single.just(idTokenPayload));
when(certificateManager.findByAlgorithm(any())).thenReturn(Maybe.empty());
when(certificateManager.get(any())).thenReturn(Maybe.empty());
when(certificateManager.defaultCertificateProvider()).thenReturn(defaultCert);
TestObserver<String> testObserver = idTokenService.create(oAuth2Request, client, null, executionContext).test();
testObserver.assertComplete();
testObserver.assertNoErrors();
JWT jwt = jwtCaptor.getValue();
assertNotNull(jwt);
assertTrue(jwt.get("iss") != null && "https://custom-iss".equals(jwt.get("iss")));
verify(certificateManager, times(1)).findByAlgorithm(any());
verify(certificateManager, times(1)).get(anyString());
verify(certificateManager, times(1)).defaultCertificateProvider();
verify(jwtService, times(1)).encode(any(), eq(defaultCert));
}
use of io.gravitee.am.model.TokenClaim in project gravitee-access-management by gravitee-io.
the class TokenServiceTest method shouldCreateWithCustomClaims.
@Test
public void shouldCreateWithCustomClaims() {
OAuth2Request oAuth2Request = new OAuth2Request();
oAuth2Request.getContext().put(ConstantKeys.AUTH_FLOW_CONTEXT_ATTRIBUTES_KEY, new HashMap<>());
TokenClaim customClaim = new TokenClaim();
customClaim.setTokenType(TokenTypeHint.ACCESS_TOKEN);
customClaim.setClaimName("iss");
customClaim.setClaimValue("https://custom-iss");
TokenClaim customClaim2 = new TokenClaim();
customClaim2.setTokenType(TokenTypeHint.ACCESS_TOKEN);
customClaim2.setClaimName("aud");
customClaim2.setClaimValue("my-api");
Client client = new Client();
client.setClientId("my-client-id");
client.setTokenCustomClaims(Arrays.asList(customClaim, customClaim2));
ReactableExecutionContext executionContext = mock(ReactableExecutionContext.class);
TemplateEngine templateEngine = mock(TemplateEngine.class);
when(templateEngine.getValue("https://custom-iss", Object.class)).thenReturn("https://custom-iss");
when(templateEngine.getValue("my-api", Object.class)).thenReturn("my-api");
when(executionContext.getTemplateEngine()).thenReturn(templateEngine);
ArgumentCaptor<JWT> jwtCaptor = ArgumentCaptor.forClass(JWT.class);
when(jwtService.encode(jwtCaptor.capture(), any(Client.class))).thenReturn(Single.just(""));
when(tokenEnhancer.enhance(any(), any(), any(), any(), any())).thenReturn(Single.just(new AccessToken("token-id")));
when(executionContextFactory.create(any())).thenReturn(executionContext);
doNothing().when(tokenManager).storeAccessToken(any());
TestObserver<Token> testObserver = tokenService.create(oAuth2Request, client, null).test();
testObserver.assertComplete();
testObserver.assertNoErrors();
JWT jwt = jwtCaptor.getValue();
assertNotNull(jwt);
assertTrue(jwt.get("iss") != null && "https://custom-iss".equals(jwt.get("iss")));
assertTrue(jwt.get("aud") != null && "my-api".equals(jwt.get("aud")));
verify(tokenManager, times(1)).storeAccessToken(any());
verify(accessTokenRepository, never()).delete(anyString());
verify(refreshTokenRepository, never()).delete(anyString());
verify(executionContext).setAttribute(eq(ConstantKeys.AUTH_FLOW_CONTEXT_ATTRIBUTES_KEY), any());
}
use of io.gravitee.am.model.TokenClaim in project gravitee-access-management by gravitee-io.
the class MongoApplicationRepository method convert.
private static TokenClaim convert(TokenClaimMongo mongoTokenClaim) {
TokenClaim tokenClaim = new TokenClaim();
tokenClaim.setTokenType(TokenTypeHint.from(mongoTokenClaim.getTokenType()));
tokenClaim.setClaimName(mongoTokenClaim.getClaimName());
tokenClaim.setClaimValue(mongoTokenClaim.getClaimValue());
return tokenClaim;
}
Aggregations