当前位置: 首页 > 知识库问答 >
问题:

OAuth 2.0访问令牌可以是JWT吗?

刘意
2023-03-14

据我所知,OAuth 2.0规范在访问令牌应该采取什么形式方面非常模糊:

令牌可以表示用于检索授权信息的标识符,或者可以以可验证的方式自包含授权信息(即,由一些数据和签名组成的令牌字符串)。为了让客户端使用令牌,可能需要额外的身份验证凭据,这些凭据超出了本规范的范围。

访问令牌提供了一个抽象层,将不同的授权构造(例如用户名和密码)替换为资源服务器可以理解的单个令牌。这种抽象使得发布访问令牌比用于获取令牌的授权授予更具限制性,并且消除了资源服务器理解各种身份验证方法的需要。

根据资源服务器安全要求,访问令牌可以具有不同的格式、结构和使用方法(例如,加密属性)。访问令牌属性和用于访问受保护资源的方法超出了本规范的范围,由RFC6750等配套规范定义。

(增加强调)

链接的RFC6750没有提供更多的特异性。有一个HTTP响应体示例,显示:

{
       "access_token":"mF_9.B5f-4.1JqM",
       "token_type":"Bearer",
       "expires_in":3600,
       "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
     }

这似乎表明access_令牌可以是不透明的ASCII文本,例如编码的JSON Web令牌(JWT)

从我的角度来看,JWT-as-access_令牌似乎有一些可取的属性:

>

  • 这是一个已知的规范,具有相当广泛的采用范围和多种语言的客户端库。

    它允许使用经过审查的加密库轻松签名和验证。

    因为它可以解码为JSON,所以它允许我们在令牌本身中包含关于令牌的元数据和信息。

    我的问题是:首先,允许访问令牌是JWT吗?其次,如果规范允许,是否还有其他考虑因素会使使用JWT作为访问令牌成为一个坏主意?

  • 共有3个答案

    缑嘉玉
    2023-03-14

    目前,OAuth工作组正在开发OAuth 2.0访问令牌的JWT配置文件:OAuth 2.0访问令牌的JSON Web令牌(JWT)配置文件

    孙洋
    2023-03-14

    只要授权服务器和资源服务器就访问令牌的含义达成一致,它们的内容是什么并不重要。因此,出现问题的唯一原因是在实现这两个服务器时使用不同的库或框架。

    海翼
    2023-03-14

    A1:规范当然允许使用JWT作为访问令牌,因为规范不限制其格式。

    A2:使用JWT作为访问令牌的想法是,它可以是自包含的,以便目标可以验证访问令牌并使用相关内容,而不必返回授权服务器。这是一个很好的属性,但使撤销变得更加困难。因此,如果您的系统需要立即撤销访问的能力,那么JWT可能不是访问令牌的正确选择(尽管可以通过缩短JWT的生存期来实现)。

     类似资料:
    • 我很难让Auth0以JWT格式返回访问令牌。我需要JWT格式的文件,以便使用javajwt库验证它们。 我正在使用Auth0登录,并使用获取访问令牌-我尝试将访问群体设置为我们的API标识符(在多个位置,包括lock auth参数和负载),但没有成功-返回访问令牌,但不是JWT。 或者,是否有用于验证“本机”Auth0访问令牌的Java库? 返回的代码用于POST到

    • OAuth2ClientOptions credentials=new OAuth2ClientOptions().setClientId(clientId).setClientSecret(clientSecret).setFlow(Oauth2FlowType.client).setTokenPath(“oauth/token URL”); 错误:访问令牌错误;io/vertx/ext/jwt

    • 这是我的身份验证流程: 用户登录后收到两个令牌(具有过期时间的访问令牌和没有过期时间的刷新令牌) 对于每个用户,刷新令牌存储在数据库中名为refreshTokens的json列中(这是一个数组) 在客户端,访问令牌和刷新令牌都存储在本地存储器上 当需要验证用户时,如果访问令牌过期,将使用刷新令牌创建一个新的访问令牌,并将其发送回用户并保持用户登录 当用户注销时,数据库中存储的刷新令牌(在refre

    • 我在同意的情况下为我的应用程序手动/php sdk创建了docusignjwt访问令牌,并在restapi的代码中使用了该访问令牌。访问令牌的到期时间为1小时。如何在不征求同意的情况下一次又一次地更新DocuSign jwt访问令牌?或者如何延长访问令牌的到期时间?

    • 我正在使用以下示例来玩Spring Cloud OAuth2实现: https://github.com/spring-cloud-samples/authserver https://github.com/spring-cloud-samples/sso 第一个是OAuth服务器,它在对用户进行身份验证时生成JWT令牌。第二个是正在被消耗的资源。根据OAuth规范,资源将用户的身份验证转发给au

    • 我们使用nginx服务器进行反向代理,并安装了openresty openid lua....这意味着每个请求都有一个 现在,我们需要做的是解码访问令牌,因为我需要来自JWT令牌的sub,并将其登录到nginx服务器上。 有办法解码并记录JWT吗?我查看了openidc.lua文件,可以看到它解码了id令牌,但是我看不到哪里可以解码访问令牌。 任何帮助都将不胜感激。