【问题标题】:Updating jwt scope in token after it has been signed签名后更新令牌中的 jwt 范围
【发布时间】: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 添加到范围吗?

编辑:

最终有没有办法更新最初授予的范围?

【问题讨论】:

    标签: java spring-boot oauth jwt


    【解决方案1】:

    @dale 您可以尝试一种稍微不同的方法,在该方法中保存到范围的内部映射。但是您必须接受首字母范围作为组。但是,您尝试实现的目标将无法实现,原因有两个。

    1. 您正在尝试更改已签名的文档,这将使文档 (JWT) 无效。但这并不重要,因为它仅供您使用。
    2. 如果后续 API 调用链接到授权范围,则这些调用不会为您验证。

    【讨论】:

    • 是的,我已经走上了内部范围的路线,谢谢
    【解决方案2】:

    在大量挖掘答案和解决方案之后,如果不注销,就无法满足要求。正如文件所指示的那样

    范围(可选)

    请求的范围不得包括其他 未在原始访问令牌中发布的范围。通常 这不会包含在请求中,如果省略,服务 应该发出与以前相同范围的访问令牌 发布。

    参考:https://www.oauth.com/oauth2-servers/access-tokens/refreshing-access-tokens/

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 2019-04-04
      • 2023-02-03
      • 2020-05-13
      • 2020-02-12
      • 2018-05-29
      • 2017-05-30
      • 2017-10-15
      • 1970-01-01
      相关资源
      最近更新 更多