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