Keycloak 当角色数达到数百个时,KeyClope重定向失败
我有两个用户,一个少于30个角色,一个有400个角色。当我使用30个角色的用户登录时,我可以毫无问题地访问重定向URL。但是当我使用400角色用户登录时,对重定向URL的请求没有完成。如果我减少400个角色用户中的角色数量,那么它将起作用。那么,有没有一种方法可以禁用java访问令牌中的传递角色,或者在导致失败的地方增加一些限制?要解决这个问题,您应该从为每个应用程序(例如oidc客户端)定义开始。该工具的主要思想是,即使您的用户是具有所有现有角色的超级复制管理员,但任何特定应用程序实际上并不需要他的所有角色。例如,客户端foo,它定义了以下角色:Keycloak 当角色数达到数百个时,KeyClope重定向失败,keycloak,Keycloak,我有两个用户,一个少于30个角色,一个有400个角色。当我使用30个角色的用户登录时,我可以毫无问题地访问重定向URL。但是当我使用400角色用户登录时,对重定向URL的请求没有完成。如果我减少400个角色用户中的角色数量,那么它将起作用。那么,有没有一种方法可以禁用java访问令牌中的传递角色,或者在导致失败的地方增加一些限制?要解决这个问题,您应该从为每个应用程序(例如oidc客户端)定义开始。该工具的主要思想是,即使您的用户是具有所有现有角色的超级复制管理员,但任何特定应用程序实际上并不需
- foo_用户
- foo_查看器
- foo.foo_用户
- foo.foo_查看器
- 酒吧管理员
例如,如果在反向代理(如nginx)后面运行keydape,则大型令牌可能不适合默认的HTTP参数缓冲区大小(afaik约2-4kb),因此必须通过适当的nginx配置选项增加它。另一个例子是tomcat,它有大约16kb作为默认HTTP头缓冲区,因此如果您发送的请求在授权头中包含非常大的访问令牌,tomcat可能无法正确处理此请求。我建议将重点放在角色缩减/优化上,而不是强制传输(提高限制)超过令牌(或任何其他地方)内的最大角色数 一些有趣的问题(除其他问题外)首先是:
- 我将为哪些受保护的资源提供服务
- 我想保护什么?相关风险是什么?(建立一个威胁模型)
- 每个应用程序如何为资源提供服务?它们是如何分布在我的应用程序中的
- 它们是什么样的资源?我如何将它们分组?哪些集合是可识别的?或者他们之间有什么关系?针对所有资源集可以采取哪些行动
- 每个应用程序的用户是谁?他们将如何与我的资源互动?哪些流是敏感的
- 我可以为所有资源定义哪些角色
- 哪个角色可以应用于每个应用程序、资源类型或集合
- 我可以创建什么类型的用户组
- 我是否需要每组角色或用户/组的附加属性或声明
关注你的用例 现在据我所知,您的阻塞点是假设每个资源都是唯一的、敏感的,并且需要它自己的权限,因此需要一个角色定义。虽然在某些情况下这可能是正确的,但在大多数其他情况下,这并不意味着您必须使用令牌角色/作用域/声明来保护资源级别的深层资产。我将试着用一个例子来说明这个句子 您的用例的RBAC和授权示例 让我们假设:
- 你有数以百万计的敏感资源需要服务
- 应用程序的每个注册用户都可以访问这些资源的(不同)集合
- 您的资源分为3类(电子书、视频、音乐)
- 每个资源都可以下载、上载、删除
- 您的应用程序将遇到未注册用户、注册用户、贡献者和管理员
- 注册用户将始终拥有对资源的读取权限(没有一个操作允许修改)
- 贡献者是特定的注册用户,可以执行特殊操作,包括修改(“上载”、“编辑”)
- 贡献者和管理员可以访问应用程序的各个管理部分
- 您的应用程序将在将来通过提供其他类别的资源而不断发展,新的操作将在以后提供给用户(例如“标记”、“编辑”或“共享链接”)
SCOPE / AUDIENCE
MY_APP
ROLES
USER
CONTRIBUTOR
ADMINISTRATOR
CLAIMS / ATTRIBUTES
CATEGORIES
ACTIONS
--> POSSIBLE USER GROUPS
USERS
Roles: USER
Claims: CATEGORIES(variable), ACTIONS('download')
CONTRIBUTORS
Roles: USER, CONTRIBUTOR
Claims: CATERGORIES(variable), ACTIONS('download', 'upload', 'edit')
ADMINISTRATORS
Roles: USER, CONTRIBUTOR, ADMINISTRATOR
Claims: CATEGORIES(*), ACTIONS(*)
- 通过在分类路径(如:
,../myapp/res/ebooks
,../myapp/res/videos
)后提供服务,相应地组织您的资源../myapp/res/music
- 通过UUID识别您的资源,使资源看起来像:
../myapp/res/ebooks/duz7327abdhgsd95a
- 对应用程序或资源的任何部分具有访问权或权限的未注册用户