JWT与OAuth 2.0有何不同?

时间:2018-11-20 04:31:01

标签: oauth-2.0 jwt

我已经使用Sprint Boot,Spring security和JWT完成了一个示例应用程序,并定义了我的自定义身份验证和授权过滤器。在执行基本身份验证(传递用户名和密码)时,我得到了xwt.yyyy.zzzz格式的JWT令牌,其中xxxx是标头,yyyy是有效负载,zzzz是签名,并且每个部分都使用Base64URL编码器进行了编码。我不了解的是JWT与OAuth 2.0有何不同。在OAuth 2.0中,我们可以传递两种类型的grant_types作为“用户名”或“客户端凭据”,并且还需要传递客户端ID,秘密ID来获取访问权限和刷新令牌。

请协助澄清我的以下疑问: 1)JWT是否比OAuth 2.0轻巧,因为它不包含刷新令牌,而仅包含访问令牌? 2)是否可以使用JWT来制作独立的授权服务器,就像我们可以在OAuth 2.0上使用@EnableAuthorizationServer批注来制作独立的授权服务器一样。我的假设正确吗? 3)JWT不接受客户端ID /秘密客户端,而仅用作获取承载令牌的基本身份验证? 4)OAuth2.0和JWT的访问令牌(或承载)的格式是否不同?

我看过一个同时使用OAuth 2.0和JWT的示例。 OAuth 2.0的目的是使授权服务器仅在最后返回JWT令牌,但是如果OAuth2.0可以自行返回令牌,则无法理解为什么使用JWT。

谢谢

1 个答案:

答案 0 :(得分:1)

JWT是RFC 7519中定义的基于JSON的令牌。 OAuth 2.0是在RFC 6749中定义的授权框架。比较两者就像问“葡萄糖与苹果派有何不同?”。

但是,可以按照RFC 7523 – OAuth 2.0客户端身份验证和授权授予的JSON Web令牌(JWT)配置文件中的定义将OAuth 2.0和JWT放在一起。它标准化了如何在OAuth 2.0框架内将JWT用作承载令牌,从而启用了我所谓的stateless authentication

关于您的问题:

  1. 是否使用JWT作为承载令牌不会影响您是否要分发刷新令牌。
  2. 不确定我是否收到您的问题。但是,使用JWT可以使您进行分散的,无状态的auth决策,因为无需集中存储令牌状态。但是,没有人会阻止您使用独立的授权服务器。
  3. 您想要进行身份验证的方式与JWT无关。仍然是OAuth 2.0。
  4. 在OAuth 2.0中,承载令牌被视为不透明令牌-格式无关紧要。如果将JWT用作承载令牌,则需要遵循相应的RFC。