JWT和OAuth2
原文链接:https://blog.csdn.net/arispy/article/details/123541758
9.Token 和 JWT 的区别
相同:
都是访问资源的令牌
都可以记录用户的信息
都是使服务端无状态化
都是只有验证成功后,客户端才能访问服务端上受保护的资源
区别:
Token:服务端验证客户端发送过来的 Token 时,还需要查询数据库获取用户信息,然后验证 Token 是否有效。
JWT:将 Token 和 Payload (载荷)加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据
要比较JWT和OAuth2,首先要明白一点就是,这两个根本没有可比性,是两个完全不同的东西。
JWT是一种认证协议
JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。
OAuth2是一种授权框架
另一方面,OAuth2是一种授权框架,提供了一套详细的授权机制(指导)。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。
为什么要比较
既然JWT和OAuth2没有可比性,为什么还要把这两个放在一起说呢?实际中确实会有很多人拿JWT和OAuth2作比较。很多情况下,在讨论OAuth2的实现时,会把JSON Web Token作为一种认证机制使用
。这也是为什么他们会经常一起出现。
简单来说:应用场景不一样
-
OAuth2用在使用第三方账号登录的情况(比如使用weibo, qq, github登录某个app)
-
JWT是用在前后端分离, 需要简单的对后台API进行保护时使用.(前后端分离无session, 频繁传用户密码不安全)
OAuth2是一个相对复杂的协议, 有4种授权模式, 其中的access code模式在实现时可以使用jwt才生成code
, 也可以不用.
授权码(authorization-code) 隐藏式(implicit) 密码式(password): 客户端凭证(client credentials)
它们之间没有必然的联系;
oauth2有client和scope的概念,jwt没有。
如果只是拿来用于颁布token的话,二者没区别。
常用的bearer算法oauth、jwt都可以用,只是应用场景不同而已。