签名后更新令牌中的 jwt 范围
Posted
技术标签:
【中文标题】签名后更新令牌中的 jwt 范围【英文标题】:Updating jwt scope in token after it has been signed 【发布时间】:2020-09-24 18:20:59 【问题描述】:令牌是通过以下方式创建的:
"oauth":
"client_id": "...",
"redirect_uri": "...",
"scope": "p1 p2 p3 p4 p5",
"state": "...",
"code_challenge": "...",
"code_challenge_method": "..."
这将返回一个带有范围选项的签名 jwt 令牌。
我想用声明中的“selected_person”更新签名的 jwt,比如 p1,所以我调用刷新令牌 url 传递刷新令牌和范围“p1”,在后端执行一些逻辑并设置人员ID。然后将人员 ID 添加到新签名的令牌中,一切都很好:
eg. /token?client_id=x&grant_type=y&refresh_token=y&scope=p1
可以使用首先定义的任何范围(p1、p2 等)调用相同的端点,因为 Spring 会将范围与初始范围列表进行比较,如果匹配则返回刷新令牌。
当一个新人与我联系时就会出现问题,所以现在我将拥有 p6。由于每个刷新令牌调用都基于第一个列表,因此 p6 不存在并且不会被允许。如果我注销并获取新令牌,则 p6 将添加到范围中。
无论如何我可以在不注销的情况下将 p6 添加到范围吗?
编辑:
最终有没有办法更新最初授予的范围?
【问题讨论】:
【参考方案1】:@dale 您可以尝试一种稍微不同的方法,在该方法中保存到范围的内部映射。但是您必须接受首字母范围作为组。但是,您尝试实现的目标将无法实现,原因有两个。
-
您正在尝试更改已签名的文档,这将使文档 (JWT) 无效。但这并不重要,因为它仅供您使用。
如果后续 API 调用链接到授权范围,则这些调用不会为您验证。
【讨论】:
是的,我已经走上了内部范围的路线,谢谢【参考方案2】:在大量挖掘答案和解决方案之后,如果不注销,就无法满足要求。正如文件所指示的那样
范围(可选)
请求的范围不得包括其他 未在原始访问令牌中发布的范围。通常 这不会包含在请求中,如果省略,服务 应该发出与以前相同范围的访问令牌 发布。
参考:https://www.oauth.com/oauth2-servers/access-tokens/refreshing-access-tokens/
【讨论】:
以上是关于签名后更新令牌中的 jwt 范围的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 Google Drive API 的错误 JWT 签名
如何让我的 Auth0 权限进入 AWS HTTP API Jwt 授权方的访问令牌的范围声明?