@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 注释应用于存储在数据库中的现有用户
Spring Security应用开发(20)基于方法的授权使用@RolesAllowed注解
在 SpringBoot 应用程序中使用 @RolesAllowed 的异常
如何在 ContainerRequest 中获取会话对象以使用注解 @RolesAllowed(Role_user)?
使用 ContainerRequestFilter 在 Jersey WebService 中自定义 @RolesAllowed 角色