@Override public Authenticator authenticate(Vertx vertx, Map<String, String> config, MultiMap headerMap, Handler<AsyncResult<Void>> resultHandler) { OAuth2FlowType flowType = getFlowType(config.get("flowType")); JsonObject params = new JsonObject(); if (config.get("username") != null) { params.put("username", config.get("username")); } if (config.get("password") != null) { params.put("password", config.get("password")); } OAuth2Auth oauth2 = KeycloakAuth.create(vertx, flowType, mapToJson(config)); oauth2.getToken(params, tokenResult -> { if (tokenResult.succeeded()) { log.debug("OAuth2 Keycloak exchange succeeded."); AccessToken token = tokenResult.result(); headerMap.set("Authorization", "Bearer " + token.principal().getString("access_token")); resultHandler.handle(Future.succeededFuture()); } else { log.error("Access Token Error: {0}.", tokenResult.cause().getMessage()); resultHandler.handle(Future.failedFuture(tokenResult.cause())); } }); return this; }
log.debug("OAuth2 exchange succeeded."); AccessToken token = tokenResult.result(); headerMap.set("Authorization", "Bearer " + token.principal().getString("access_token")); resultHandler.handle(Future.succeededFuture()); } else {
@Test public void tokenShouldBeExpiredWhenExpirationDateIsInThePast() { config = oauthConfig; oauth2.authenticate(tokenConfig, res -> { if (res.failed()) { fail(res.cause().getMessage()); } else { AccessToken token = (AccessToken) res.result(); // hack the token to set the expires_at (to yesterday) token.principal().put("expires_at", System.currentTimeMillis() - 24 * 60 * 60 * 1000); assertTrue(token.expired()); testComplete(); } }); await(); }
@Test public void whenRefreshingTokenShouldGetNewAccessToken() { config = oauthConfig; oauth2.authenticate(tokenConfig, res -> { if (res.failed()) { fail(res.cause().getMessage()); } else { AccessToken token = (AccessToken) res.result(); final long origTTl = token.principal().getLong("expires_at"); // refresh the token config = refreshConfig; token.refresh(v -> { if (v.failed()) { fail(v.cause().getMessage()); } else { assertTrue(origTTl < token.principal().getLong("expires_at")); testComplete(); } }); } }); await(); }
@Test public void introspectAccessTokenKeyCloakWay() { config = oauthIntrospect; fixture = fixtureKeycloak; oauth2.introspectToken(token, res -> { if (res.failed()) { fail(res.cause()); } else { AccessToken token = res.result(); assertNotNull(token); assertNotNull(token.principal()); testComplete(); } }); await(); } }
assertNotNull(token.principal());
assertNotNull(token); JsonObject principal = token.principal().copy();
AccessToken token = res.result(); assertNotNull(token); JsonObject principal = token.principal();