vertx 中的 JWT 身份验证引发未经授权的行为
Posted
技术标签:
【中文标题】vertx 中的 JWT 身份验证引发未经授权的行为【英文标题】:JWT authentication in vertx throwing unauthorized 【发布时间】:2021-07-23 14:07:34 【问题描述】:在我的应用程序中,我正在使用带有 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 代码。
【问题讨论】:
你必须end()
处理程序中某处的 RequestContext。否则不会被退回
@injecteer,它没有进入“/api/getAuthentication”处理程序。我已经尝试过 end(),还是一样,这就是为什么我看不到任何日志
【参考方案1】:
首先,JWTAuthOptions
不会对您在键 "public-key"
下设置的内容执行任何操作,因为它没有任何映射到它的属性(即使在 Java 中可能有一个 -
属性名称)。因此,要么直接使用设置器在 JWTAuthOptions
上设置您的值,要么咨询 documentation 以获得正确的键。
其次,如果您的 Keycloak 是使用 OIDC 设置的,那么您可以简单地使用 OpenIDConnectAuth
自动从 Keycloak 中发现必要参数的类。哪个更容易。
【讨论】:
,非常感谢。我尝试了第一个选项,它按预期工作以上是关于vertx 中的 JWT 身份验证引发未经授权的行为的主要内容,如果未能解决你的问题,请参考以下文章