来自 vertx RoutingContext 的 KeycloakSecurityContext
KeycloakSecurityContext from vertx RoutingContext
实际上我正在使用 Vertx Router,我在 headers 中有一个带有 Authorization 的请求,想找到有关令牌的更多信息,所以我尝试了使用如下代码创建 KeycloakSecurityContext 形式 Vert.x RoutingContext:
KeycloakSecurityContext securityContext = (KeycloakSecurityContext) routingContext.session().get(KeycloakSecurityContext.class.getName());
但是失败了。 (NPE, 空seesion.data)
谁能提示我,如何从 Vertx 路由创建 Keycloak 上下文?将来我想终止该令牌,因此欢迎提供额外提示。
谢谢,
Vert.xWeb 中没有 Keycloak 安全上下文。 Vert.x 和 Keycloak 之间的所有交互都是通过 OAuth2 协议完成的,该协议独立于您使用的供应商,例如:Keycloak、Facebook、Google、Twitter、Linkedin 等...
从版本 3.3.0 开始,您将能够使用 OAuth2 令牌中编码的 keycloak 授权作为 Vert.x 授权机构,这样您不仅可以进行身份验证,还可以进行授权。
举个例子:
// Initialize the OAuth2 Library
OAuth2Auth oauth2 = OAuth2Auth.createKeycloak(vertx, OAuth2FlowType.PASSWORD, keycloakJson);
// first get a token (authenticate)
oauth2.getToken(new JsonObject().put("username", "user").put("password", "secret"), res -> {
if (res.failed()) {
// error handling...
} else {
AccessToken token = res.result();
// now check for permissions
token.isAuthorised("account:manage-account", r -> {
if (r.result()) {
// this user is authorized to manage its account
}
});
}
});
实际上我正在使用 Vertx Router,我在 headers 中有一个带有 Authorization 的请求,想找到有关令牌的更多信息,所以我尝试了使用如下代码创建 KeycloakSecurityContext 形式 Vert.x RoutingContext:
KeycloakSecurityContext securityContext = (KeycloakSecurityContext) routingContext.session().get(KeycloakSecurityContext.class.getName());
但是失败了。 (NPE, 空seesion.data)
谁能提示我,如何从 Vertx 路由创建 Keycloak 上下文?将来我想终止该令牌,因此欢迎提供额外提示。
谢谢,
Vert.xWeb 中没有 Keycloak 安全上下文。 Vert.x 和 Keycloak 之间的所有交互都是通过 OAuth2 协议完成的,该协议独立于您使用的供应商,例如:Keycloak、Facebook、Google、Twitter、Linkedin 等...
从版本 3.3.0 开始,您将能够使用 OAuth2 令牌中编码的 keycloak 授权作为 Vert.x 授权机构,这样您不仅可以进行身份验证,还可以进行授权。
举个例子:
// Initialize the OAuth2 Library
OAuth2Auth oauth2 = OAuth2Auth.createKeycloak(vertx, OAuth2FlowType.PASSWORD, keycloakJson);
// first get a token (authenticate)
oauth2.getToken(new JsonObject().put("username", "user").put("password", "secret"), res -> {
if (res.failed()) {
// error handling...
} else {
AccessToken token = res.result();
// now check for permissions
token.isAuthorised("account:manage-account", r -> {
if (r.result()) {
// this user is authorized to manage its account
}
});
}
});