我正在使用 keycloak,并且我创建了一个 dropwizard 服务,我想在其中开始强制执行角色。
我尝试使用 @RolesAllowd("user") 注释,但它总是返回 403。
我也试过@PermitAll,效果很好。
我知道我已正确连接到服务器,因为用户中有正确的信息(电子邮件、姓名等),但角色来自哪里?
有没有办法查看用户拥有的角色?
我正在使用 keycloak,并且我创建了一个 dropwizard 服务,我想在其中开始强制执行角色。
我尝试使用 @RolesAllowd("user") 注释,但它总是返回 403。
我也试过@PermitAll,效果很好。
我知道我已正确连接到服务器,因为用户中有正确的信息(电子邮件、姓名等),但角色来自哪里?
有没有办法查看用户拥有的角色?
(回答我自己的问题)
我遇到@RolesAllowd("user")的问题总是返回 403,这是因为 Keycloak UI 中有一个名为“ Scope Param Required ”的复选框。工具提示内容如下:
仅当在授权/令牌请求期间使用带有角色名称的范围参数时,才会授予此角色。
事实证明,如果您尝试使用该角色,并且复选框已打开,则不会将其发送到客户端,因此在客户端看来,用户没有该角色。该复选框已为我单击打开,这就是注释显示用户未通过身份验证的原因。
因此,如果选中该复选框,您需要明确要求角色,这是您对用户执行此操作的方法:
"scope" : {
"realm" : [ "user" ]
}
这是来自 Keyclaok 的更多信息:https ://issues.jboss.org/browse/KEYCLOAK-231
在 keycloak 管理控制台上的应用程序领域中,您有一个称为角色的部分。您必须在此处添加将由 java 安全性检查的角色。如果您希望用户在注册后自动接收角色,您需要将此角色添加到默认角色(角色->默认角色)中。也可以在 users -(select a user)->role mapping->assigned roles 中手动为现有用户添加角色