@RolesAllowed() 在 keycloak 中检查啥角色

Posted

技术标签:

【中文标题】@RolesAllowed() 在 keycloak 中检查啥角色【英文标题】:What role is being checked by @RolesAllowed() in keycloak@RolesAllowed() 在 keycloak 中检查什么角色 【发布时间】:2016-06-21 16:14:23 【问题描述】:

我正在使用 keycloak,并且我创建了一个 dropwizard 服务,我想在其中开始强制执行角色。

我尝试过使用 @RolesAllowd("user") 注释,但它总是返回 403。

我也试过@PermitAll,效果很好。

我知道我已正确连接到服务器,因为用户中有正确的信息(电子邮件、姓名等),但角色来自哪里?

有没有办法查看用户拥有的角色?

【问题讨论】:

【参考方案1】:

(回答我自己的问题)

我遇到的问题 @RolesAllowd("user") 总是返回 403,这是因为 Keycloak UI 中名为“Scope Param Required”的复选框.工具提示如下:

只有在授权/令牌请求期间使用带有角色名称的范围参数时才会授予此角色。

事实证明,如果您尝试使用该角色,并且复选框已打开,则不会将其发送到客户端,因此客户端会认为该用户没有该角色。该复选框已为我单击打开,这就是注释显示用户未通过身份验证的原因。

因此,如果选中该复选框,您需要明确要求角色,这是您对用户执行此操作的方法:

"scope" : 
  "realm" : [ "user" ]

这里有更多来自 Keyclaok 的信息:https://issues.jboss.org/browse/KEYCLOAK-231

【讨论】:

【参考方案2】:

在 keycloak 管理控制台上的应用程序领域中,您有一个称为角色的部分。您必须在此处添加将由 java 安全性检查的角色。 如果您希望用户在注册后自动接收角色,您需要将此角色添加到默认角色(角色 -> 默认角色)中。也可以在 users -(select a user)->role mapping->assigned roles

中手动添加现有用户角色

【讨论】:

以上是关于@RolesAllowed() 在 keycloak 中检查啥角色的主要内容,如果未能解决你的问题,请参考以下文章

如何访问由@RolesAllowed 保护的泽西岛资源

将@RolesAllowed 注释应用于存储在数据库中的现有用户

Spring Security应用开发(20)基于方法的授权使用@RolesAllowed注解

在 SpringBoot 应用程序中使用 @RolesAllowed 的异常

如何在 ContainerRequest 中获取会话对象以使用注解 @RolesAllowed(Role_user)?

使用 ContainerRequestFilter 在 Jersey WebService 中自定义 @RolesAllowed 角色