访问 oauth.getToken 响应中的角色 vert.x keycloak
Access roles in oauth.getToken response vert.x keycloak
我正在使用下面的代码 1) 在 keycloak 上登录用户,2) 验证用户是否具有访问某些资源的特定角色。
JsonObject keycloakJson = new JsonObject()
.put("realm", "OQM") // (1)
.put("realm-public-key", "MIIBIwercerewrcewrc7BAij3P+Nz76opTVlhWijnIGefnBygViDrUdxS/nZSDTkXrFnKy2lpNZyecWrNVD6Zs6w65pBa60zDWODkuIqE6LbbfwHBs5RyvuzAFRtRFbieZub8x4suzN5pJOUPWdtgWqQasdawercwerewvrewrvewrcwxewrvbewvrxw9k+TPKGdf3e9QXL9FGG/9084+6Z8RSZ4JL4v5YqVtpDyohf9MPJwn/i46KcAYzgleJFFCqwuPry8CEzafqXVlzIEkSqwIDAQAB") // (2)
.put("auth-server-url", "http://152.18.17.63:8080/auth")
.put("ssl-required", "external")
.put("resource", "oqm") // (3)
.put("credentials", new JsonObject().put("secret", "2343253252-c8f1-42b2-866c-87a2a7ff95f6")); // (4)
OAuth2Auth oauth2 = KeycloakAuth.create(vertx, OAuth2FlowType.PASSWORD, keycloakJson);
JsonObject tokenConfig = new JsonObject().put("username", "dummyUser").put("password", "password").put("scope", "modify-account view-account");
oauth2.getToken(tokenConfig, res -> {
if (res.failed()) {
rc.response().setStatusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.code()).end();
} else {
AccessToken token = (AccessToken)res.result();
token.isAuthorised("ReleaseOrders", handler -> {
if(handler.result()) {
HttpServerResponse response = VerticleUtils.buildOKHeaders(rc);
response.end(Json.encodePrettily(token.principal()));
}
else {
VerticleUtils.notAuthorized(rc);
}
});
}
});
但是,我需要获得用户被授权的角色列表。我可以在 属性 中看到角色
AccessToken 对象返回,但由于它的访问是私有的,我无法访问它们。
目前您只能从 principal()
方法调用中获取完整令牌。对于 3.5.1,我们正在努力从 AcessToken
对象公开令牌。
我正在使用下面的代码 1) 在 keycloak 上登录用户,2) 验证用户是否具有访问某些资源的特定角色。
JsonObject keycloakJson = new JsonObject()
.put("realm", "OQM") // (1)
.put("realm-public-key", "MIIBIwercerewrcewrc7BAij3P+Nz76opTVlhWijnIGefnBygViDrUdxS/nZSDTkXrFnKy2lpNZyecWrNVD6Zs6w65pBa60zDWODkuIqE6LbbfwHBs5RyvuzAFRtRFbieZub8x4suzN5pJOUPWdtgWqQasdawercwerewvrewrvewrcwxewrvbewvrxw9k+TPKGdf3e9QXL9FGG/9084+6Z8RSZ4JL4v5YqVtpDyohf9MPJwn/i46KcAYzgleJFFCqwuPry8CEzafqXVlzIEkSqwIDAQAB") // (2)
.put("auth-server-url", "http://152.18.17.63:8080/auth")
.put("ssl-required", "external")
.put("resource", "oqm") // (3)
.put("credentials", new JsonObject().put("secret", "2343253252-c8f1-42b2-866c-87a2a7ff95f6")); // (4)
OAuth2Auth oauth2 = KeycloakAuth.create(vertx, OAuth2FlowType.PASSWORD, keycloakJson);
JsonObject tokenConfig = new JsonObject().put("username", "dummyUser").put("password", "password").put("scope", "modify-account view-account");
oauth2.getToken(tokenConfig, res -> {
if (res.failed()) {
rc.response().setStatusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.code()).end();
} else {
AccessToken token = (AccessToken)res.result();
token.isAuthorised("ReleaseOrders", handler -> {
if(handler.result()) {
HttpServerResponse response = VerticleUtils.buildOKHeaders(rc);
response.end(Json.encodePrettily(token.principal()));
}
else {
VerticleUtils.notAuthorized(rc);
}
});
}
});
但是,我需要获得用户被授权的角色列表。我可以在 属性 中看到角色 AccessToken 对象返回,但由于它的访问是私有的,我无法访问它们。
目前您只能从 principal()
方法调用中获取完整令牌。对于 3.5.1,我们正在努力从 AcessToken
对象公开令牌。