use of io.gravitee.am.common.jwt.JWT 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.common.jwt.JWT in project gravitee-access-management by gravitee-io.
the class UserInfoEndpointHandlerTest method shouldNotInvokeUserEndpoint_clientOnlyToken.
@Test
public void shouldNotInvokeUserEndpoint_clientOnlyToken() throws Exception {
Client client = new Client();
client.setId("client-id");
client.setClientId("client-id");
JWT token = new JWT();
token.setSub("client-id");
token.setAud("client-id");
router.route().order(-1).handler(createOAuth2AuthHandler(oAuth2AuthProvider(token, client)));
testRequest(HttpMethod.GET, "/userinfo", req -> req.putHeader(HttpHeaders.AUTHORIZATION, "Bearer test-token"), HttpStatusCode.UNAUTHORIZED_401, "Unauthorized", null);
}
use of io.gravitee.am.common.jwt.JWT in project gravitee-access-management by gravitee-io.
the class UserInfoEndpointHandlerTest method shouldNotInvokeUserEndpoint_invalidToken_noClient.
@Test
public void shouldNotInvokeUserEndpoint_invalidToken_noClient() throws Exception {
JWT jwt = new JWT();
jwt.setAud("client-id");
router.route().order(-1).handler(createOAuth2AuthHandler(oAuth2AuthProvider(new InvalidClientException())));
testRequest(HttpMethod.GET, "/userinfo", req -> req.putHeader(HttpHeaders.AUTHORIZATION, "Bearer test-token"), HttpStatusCode.UNAUTHORIZED_401, "Unauthorized", null);
}
use of io.gravitee.am.common.jwt.JWT in project gravitee-access-management by gravitee-io.
the class UserInfoEndpointHandlerTest method shouldInvokeUserEndpoint_scopesRequest_and_claimsRequest_signedResponse.
@Test
public void shouldInvokeUserEndpoint_scopesRequest_and_claimsRequest_signedResponse() throws Exception {
JWT jwt = new JWT();
jwt.setJti("id-token");
jwt.setAud("client-id");
jwt.setSub("id-subject");
jwt.setScope("openid email address");
jwt.setClaimsRequestParameter("{\"userinfo\":{\"name\":{\"essential\":true}}}");
Client client = new Client();
client.setId("client-id");
client.setClientId("client-id");
client.setUserinfoSignedResponseAlg("algorithm");
router.route().order(-1).handler(createOAuth2AuthHandler(oAuth2AuthProvider(jwt, client)));
User user = createUser();
when(userService.findById(anyString())).thenReturn(Maybe.just(user));
when(jwtService.encodeUserinfo(any(), any())).thenReturn(Single.just("signedJwtBearer"));
when(jweService.encryptUserinfo("signedJwtBearer", client)).thenReturn(Single.just("signedJwtBearer"));
testRequest(HttpMethod.GET, "/userinfo", req -> req.putHeader(HttpHeaders.AUTHORIZATION, "Bearer test-token"), resp -> {
assertEquals(MediaType.APPLICATION_JWT, resp.getHeader(HttpHeaders.CONTENT_TYPE));
resp.bodyHandler(body -> assertEquals("signedJwtBearer", body.toString()));
}, HttpStatusCode.OK_200, "OK", null);
}
use of io.gravitee.am.common.jwt.JWT in project gravitee-access-management by gravitee-io.
the class UserInfoEndpointHandlerTest method shouldInvokeUserEndpoint_noOpenIDScope.
@Test
public void shouldInvokeUserEndpoint_noOpenIDScope() throws Exception {
JWT jwt = new JWT();
jwt.setJti("id-token");
jwt.setAud("client-id");
jwt.setSub("id-subject");
jwt.setScope("read");
Client client = new Client();
client.setId("client-id");
client.setClientId("client-id");
router.route().order(-1).handler(createOAuth2AuthHandler(oAuth2AuthProvider(jwt, client)));
testRequest(HttpMethod.GET, "/userinfo", req -> req.putHeader(HttpHeaders.AUTHORIZATION, "Bearer test-token"), HttpStatusCode.FORBIDDEN_403, "Forbidden", null);
}
Aggregations