当前位置:   article > 正文

对比三种认证方式:传统token认证,jwt认证,oauth认证_jwt oauth

jwt oauth

1. Token基本原理

1、客户端使用用户名跟密码请求登录;

2、服务端收到请求,去验证用户名与密码;

3、验证成功,服务端会签发一个Token(也就是随机生成一个字符串)保存到(Session,redis,mysql…)中,然后再把这个 Token 发送给客户端;

4、客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;

5、客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;

6、服务端收到请求,验证密客户端请求里面带着的 Token和服务器中保存的Token进行对比校验, 如果验证成功,就继续执行客户端请求的业务逻辑,否则就是验证失败报错返回给客户端;

1.1 token示例

传统的token认证,这个token就是一个随机字符串。服务端收到后,直接拿去查库比对,确认用户信息。

2. jwt认证原理

1、客户端使用用户名跟密码请求登录;

2、服务端收到请求,去验证用户名与密码;

3、验证成功,服务端会在配置文件中配置一个jwt的secret。根据secret签发一个JwtToken,无须存储到服务器,直接再把这个JwtToken发送给客户端;

4、客户端收到JwtToken以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;

5、客户端每次向服务端请求资源的时候需要带着服务端签发的JwtToken;

6、服务端收到请求,使用jwt的secret验证密客户端请求里面带着的 JwtToken,如果验证成功,就继续执行客户端请求的业务逻辑,否则就是验证失败报错返回给客户端;

2.2 jwt token示例

这个服务端和客户端一直传输的jwttoken长啥样呢?长下面这样。

就是一个字符串,分三个部分,通过.连接起来。

Header.Payload.Signature

拆解如下:

base64UrlEncode(header)   + .  + base64UrlEncode(payload)   + .  + 签名(HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret))

2.2.1 header
  1. # JWT头部分是一个描述JWT元数据的JSON对象,通常如下所示。
  2. {
  3. "alg": "HS256",
  4. "typ": "JWT"
  5. }
  6. # 1)alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);
  7. # 2)typ属性表示令牌的类型,JWT令牌统一写为JWT。
  8. # 3)最后,使用Base64 URL算法将上述JSON对象转换为字符串保存。
2.2.2 Payload
  1. #1、有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。 JWT指定七个默认 字段供选择。
  2. '''
  3. iss:发行人
  4. exp:到期时间
  5. sub:主题
  6. aud:用户
  7. nbf:在此之前不可用
  8. iat:发布时间
  9. jti:JWT
  10. ID用于标识该JWT
  11. '''
  12. #2、除以上默认字段外,我们还可以自定义私有字段,如下例:
  13. {
  14. "sub": "1234567890",
  15. "name": "chongchong",
  16. "admin": true
  17. }
  18. #3、注意 默认情况下JWT是未加密的,任何人都可以解读其内容,因此不要构建隐私信息字段,存放保密信息,以防 止信息泄露。
  19. JSON对象也使用Base64 URL算法转换为字符串保存
2.2.3 签名哈希

签名=HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

  1. # 1.签名哈希部分是对上面两部分数据签名,通过指定的算法生成哈希,以确保数据不会被篡改。
  2. # 2.首先,需要指定一个密码(secret),该密码仅仅为保存在服务器中,并且不能向用户公开。
  3. # 3.然后,使用标头中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名。
  4. # 4.HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),secret)
  5. # 5.在计算出签名哈希后,JWT头,有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用"."分 隔,就构成整个JWT对象

这样一个结构,服务端拿到这个jwt token后,结合自己的secret 对前面两部分进行签名,再和jwt token中的签名进行对比,就能直接判断这个jwt token的真实性。而不再像传统认证那样去查库才能认证了。

3oauth认证原理


 OAuth(开放授权)是一个开放标准,用于授权一个应用程序或服务访问用户在另一个应用程序中的资源,而无需提供用户名和密码。这使得用户可以安全地分享他们的数据资源,同时保持对其数据的控制。OAuth 2.0在现代互联网应用中被广泛使用,例如,你可以使用你的Google账号登录到其他网站,这就是OAuth的一种应用。

简单来说:OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。

token&jwt  都是系统自己的用户的认证方式。

oauth   是系统允许其他系统的用户来登录自己的系统。比如很多系统需要微信授权登录,实际上就是用户用微信的用户信息,登录自己的系统。作为自己系统的用户。

允许其他用户登录自己系统,还有单点登录。

单点登录,登录一个系统后,自动登录其他系统。

OAuth 2.0广泛应用于各种场景,以下是一些常见的应用场景:

  • 社交登录:用户可以使用他们的社交媒体帐户登录到其他应用程序,例如使用Google或Facebook登录。

  • API访问:开发人员可以使用OAuth 2.0来访问第三方API,例如使用GitHub API或Twitter API。

  • 单点登录:用户可以使用一个身份验证提供商登录到多个相关的应用程序,而无需多次输入凭证。

  • 授权访问:应用程序可以请求用户授权访问其资源,例如Google云存储或Dropbox。

  • 移动应用授权:移动应用程序可以安全地请求访问用户数据,如照片、联系人或位置信息。

3.1认证原理

OAuth 的核心就是向第三方应用颁发令牌。

而oauth定义了获得令牌的四种授权方式:

  • 授权码(authorization-code)
  • 隐藏式(implicit)
  • 密码式(password):
  • 客户端凭证(client credentials)

最常用的是授权码模式。

3.1.1. 授权码模式

用户访问想要访问a系统,a系统上有可以用b系统(微信)来登录。用户选择b系统登录,跳转到b系统去授权,用户点击同意授权,接着会返回到b系统中,拿到授权码。这时候用户继续访问a系统。a系统用这个授权码访问b系统(微信)。微信判断这个授权码正确,然后派发token。返回正确。a系统则可以用这个token访问用户在B系统(微信)上的资源。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/642122
推荐阅读
相关标签
  

闽ICP备14008679号