【问题标题】:Does JWT require Access token and refresh token always?JWT 是否总是需要访问令牌和刷新令牌?
【发布时间】:2019-09-19 22:43:55
【问题描述】:

恕我直言,在 OAuth2.0 中签署 JWT 令牌有两种方法 - 使用对称散列算法(如 HS256)或使用非对称散列算法 (RS256)。

如果我们使用RS256等非对称哈希算法,是否需要访问令牌和刷新令牌?我相信它们不是必需的,因为无论负载中存在什么声明,资源服务器都可以独立验证(只要它知道授权服务器的公钥)。

那么访问令牌和刷新令牌的用例是什么?仅对称散列需要吗?

请帮助我更好地理解这一点。提前致谢。

【问题讨论】:

    标签: authentication oauth-2.0 jwt jwt-auth


    【解决方案1】:

    访问令牌作为 JWT 的主要思想是您不必每次都去授权服务器。您可以通过检查签名自行验证。这可以从授权服务器/数据库中移除大量流量。
    您将需要使用非对称散列算法,以便发行者拥有私钥,并且他是唯一允许发行令牌的人,您可以使用公钥检查 JWT。
    刷新令牌是针对数据库验证的,可以撤销。
    每次访问令牌过期时,您都使用刷新令牌从颁发者那里获取新的访问令牌。

    如果您计划每次要检查访问令牌是否有效时都去授权服务器,您可以使用对称散列算法,但是您错过了 JWT 的要点 - 您仍然拥有所有授权的中心位置请求。

    【讨论】:

    • 感谢 Boaz,但我认为要验证声明,您不需要访问令牌。您可以通过获取内容的散列并验证签名中的散列是什么来验证内容。我想了解的是访问令牌的目的到底是什么。
    • 我们以 Google 为例:在 OAuth 握手之后,您拥有访问令牌,可用于调用 Google API(从 Google Drive 获取文件)。谷歌服务器通过检查访问令牌是否有效来知道您是否被允许这样做。它不一定是 JWT,它可以是他们访问数据库并查看它是否存在并包含所需权限的密钥。如果它是 JWT,他们可以查看声明是否包含该文件的用户和权限以及签名匹配。
    猜你喜欢
    • 2021-08-26
    • 2021-08-23
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2020-10-15
    • 2015-11-10
    • 2021-12-14
    • 2018-10-16
    相关资源
    最近更新 更多