【问题标题】:How to differentiate JWT access token from refresh token used as Authorization header如何区分 JWT 访问令牌和用作授权标头的刷新令牌
【发布时间】:2020-04-28 12:45:15
【问题描述】:

如何确定 Authorization: Bearer ... 中使用的 JWT 令牌是访问令牌还是刷新令牌。换句话说,是什么阻止了用户在 Authorization 标头中使用他的 JWT 刷新令牌而不是访问令牌。

当我在本指南部分https://github.com/starkandwayne/ultimate-guide-to-uaa/blob/master/docs/refresh-tokens.md#jwt-refresh-tokens 中查看访问令牌和刷新令牌的负载时,我看不到任何真正的方法来识别哪个是哪个。

刷新令牌:

{
"jti": "3e53955fcff6429a8a187c4c37f1b592-r",
"sub": "48a8d464-12dd-4b14-b7a0-96af58379ffb",
"scope": [
    "openid",
    "airports.all"
],
"client_id": "airports",
"cid": "airports",
"user_id": "48a8d464-12dd-4b14-b7a0-96af58379ffb",
"origin": "uaa",
"grant_type": "password",
"user_name": "airports-all",
"rev_sig": "4c3b3810",
"iat": 1530739971,
"exp": 1533331970,
"iss": "https://192.168.50.6:8443/oauth/token",
"zid": "uaa",
"aud": [
    "openid",
    "airports"
]
}

访问令牌:

{
"jti": "fe39323464d74fb5a6fcb71d89f722c4",
"sub": "48a8d464-12dd-4b14-b7a0-96af58379ffb",
"scope": [
    "openid",
    "airports.all"
],
"client_id": "airports",
"cid": "airports",
"azp": "airports",
"user_id": "48a8d464-12dd-4b14-b7a0-96af58379ffb",
"origin": "uaa",
"grant_type": "password",
"user_name": "airports-all",
"email": "airports-all@example.com",
"auth_time": 1530739970,
"rev_sig": "4c3b3810",
"iat": 1530739971,
"exp": 1530783171,
"iss": "https://192.168.50.6:8443/oauth/token",
"zid": "uaa",
"aud": [
    "openid",
    "airports"
]
}

标准是什么?换个范围?

【问题讨论】:

    标签: oauth oauth-2.0 jwt jwt-auth


    【解决方案1】:

    在您发布的链接中,建议使用不是 JWT 的不透明刷新令牌,您应该使用该配置。

    客户端(通常是 UI)应该只向后端发送访问令牌,并且应该拒绝任何其他类型的令牌。正确的配置会强制执行此操作。

    后端的工作是验证收到的 JWT。如上所述的非标准设置可能意味着这将与刷新令牌一起使用,但这在两个方面是不好的:

    • API 消息凭证的生命周期很长,如果令牌以某种方式被拦截,安全风险会更大
    • 该解决方案不可移植,并且将来可能会因客户而中断,或者如果您曾经更换过提供商

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 2020-10-15
      • 2021-12-14
      • 2018-10-16
      • 2022-12-23
      • 2019-03-08
      • 2019-03-25
      • 2020-07-12
      相关资源
      最近更新 更多