原文地址

一、JWT和OAuth2比较

要比较JWTOAuth2?首先要明白一点就是,这两个根本没有可比性,是两个完全不同的东西。

  • JWT是一种认证协议
         JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问

  • OAuth2是一种授权框架
         OAuth2是一种授权框架,提供了一套详细的授权机制。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。OAuth2 通过将用户身份验证委派给托管用户帐户的服务以及授权客户端访问用户帐户进行工作

二、JSON Web Token (JWT)

     JWT是一种安全标准。基本思路就是用户提供用户名和密码给认证服务器,服务器验证用户提交信息信息的合法性;如果验证成功,会产生并返回一个Token(令牌),用户可以使用这个token访问服务器上受保护的资源。

  • token包含三部分

    • Header头部分
           头部分简单声明了类型(JWT)以及产生签名所使用的算法

      1
      2
      3
      4
      {
      "alg" : "AES256",
      "typ" : "JWT"
      }
    • Claims声明
            声明部分是整个token的核心,表示要发送的用户详细信息。有些情况下,我们很可能要在一个服务器上实现认证,然后访问另一台服务器上的资源;或者,通过单独的接口来生成token,token被保存在应用程序客户端(比如浏览器)使用。

      1
      2
      3
      4
      5
       {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
      }
    • Signature签名
           签名的目的是为了保证Header和Claims两部分信息不被篡改。如果尝试使用Bas64对解码后的token进行修改,签名信息就会失效。一般使用一个私钥(private key)通过特定算法对Header和Claims进行混淆产生签名信息,所以只有原始的token才能于签名信息匹配。

三、OAuth2

     OAuth2不是一个标准协议,而是一个安全的授权框架。它详细描述了系统中不同角色、用户、服务前端应用(比如API),以及客户端(比如网站或移动App)之间怎么实现相互认证。

ps: 想了解具体的oauth2授权步骤可以移步阮一峰老师的理解OAuth 2.0