在我的应用程序中,我使用的是带有 keycloak 身份验证的响应。我正在尝试使用从 keycloak 接收到的令牌来保护我的后端 vertx API。 我关注了这个博客 http://paulbakker.io/java/jwt-keycloak-angular2/
我是这样从 react 调用的
return await fetch('/api/getAuthentication',{
method: 'GET',
headers: {"Authorization" : `Bearer ${token}`}
})
}
在我的顶点侧
JsonObject authConfig = new JsonObject()
.put("public-key", "MyPublicKeyFromKeycloak")
.put("permissionsClaimKey", "realm_access/roles");
JWTAuth authProvider = JWTAuth.create(vertx, new JWTAuthOptions(authConfig));
router.route("/api/*").handler(JWTAuthHandler.create(authProvider));
我尝试使用以下代码进行测试,
router.route("/api/getAuthentication").handler(ctx -> {
logger.info("Headers: {}", ctx.request().headers().get("Authorization"));
logger.info(ctx.user().principal().encodePrettily());
});
我看不到任何日志,在我的浏览器中,响应为“未经授权”,带有 401 代码。
答案 0 :(得分:0)
首先,JWTAuthOptions
不会对您在键 "public-key"
下设置的内容做任何事情,因为它没有任何映射到它的属性(即使在 Java 中可以有一个 { {1}} 在属性名称中)。因此,要么直接使用 setter 在 -
上设置值,要么咨询 documentation 以获得正确的键。
第二,如果您的 Keycloak 是使用 OIDC 设置的,那么您可以简单地使用 JWTAuthOptions
类自动从 Keycloak 中发现必要的参数。哪个更容易。