在微服务架构中,我们使用来自keycloak的JWT令牌.现在我们希望获得具有较少权限的第二个访问令牌(减少声明/减少角色).用例是:新的访问令牌应该使其所有者只能访问文档存储中的一个文档.为什么?如果他可以偷走这个令牌,可以限制某人可以做的伤害.
理想情况下,我们可以通过特殊的refresh_token调用获取第二个令牌(持有刷新令牌的用户有权获得完整的访问令牌,因此他也应该能够获得部分访问令牌).我们怎么能这样做?
使用范围似乎不起作用:给定范围的列表仅在登录时进行评估(因此在刷新令牌时,我不能采用范围列表).
我还尝试了解https://www.keycloak.org/docs/latest/authorization_services/index.html#_service_overview或RPT.但不幸的是,我遗漏了一些文档(我的尝试失败了).
还有其他想法吗?或者甚至可以举例说明如何做到这一点?
稍后编辑以使我对RPT的问题更加明确: https ://www.keycloak.org/docs/latest/authorization_services/index.html#_service_overview说:
... Keycloak授权服务提供对OAuth2的扩展,以允许基于与所请求的资源或范围相关联的所有策略的处理来发布访问令牌.这意味着资源服务器可以根据服务器授予的权限强制访问其受保护资源,并由访问令牌持有.在Keycloak授权服务中,具有权限的访问令牌称为请求方令牌或简称RPT.
这样的具有权限的访问令牌可以用于我们的目标吗?
在我的实验中,我可以使用grant_type = urn获取令牌:ietf:params:oauth:grant-type:uma-ticket.但是有一些问题:
我不得不更改keycloak中的一些设置以启用权限(在它说"客户端不支持权限"之前).在我做了这些更改之后,我的正常登录呼叫将不再有效(我可以在我的令牌仍然有效时进行测试).我不得不抓住我的keycloak配置继续工作.
我真的不了解用于此功能的权限模型
端到端示例很有用(Keycloak文档中的示例有点抽象).