JWT 和 OAuth2 区别与关系
JWT 和 OAuth2 是两个完全不同的东西,两者在使用场景和底层原理有很大的差异,OAuth2 是一种授权框架,JWT是一种认证协议。
1. JWT是一种认证协议
JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。
2. OAuth2是一种授权框架
OAuth2是一种授权框架,提供了一套详细的授权机制(指导)。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。
3. JWT 与 OAuth2 的联系
既然 JWT 和 OAuth2 没有可比性,为什么还要把这两个放在一起说呢?实际中确实会有很多人拿JWT和OAuth2作比较。很多情况下,在讨论OAuth2的实现时,会把JSON Web Token作为一种认证机制使用。这也是为什么他们会经常一起出现。
JWT 和 OAuth2 最大的不同是应用场景不同。
OAuth2 用在使用第三方账号登录的情况(比如使用 weibo, qq, github 登录某个 app)。
JWT 用在前后端分离,需要简单的对后台API进行保护时使用,前后端分离无 session,,频繁传用户密码不安全。
OAuth2 是一个相对复杂的协议,有4种授权模式, 其中的 access code 模式在实现时可以使用 JWT 生成 code,也可以不用。所以,它们之间没有必然的联系,OAuth2 有 client 和 scope 的概念,JWT 没有。如果只是拿来用于颁布 token 的话,二者没区别。常用的 bearer 算法 oauth、jwt 都可以用,只是应用场景不同。
下一章:JWT Go 示例代码
Golang 通过第三方库支持 JWT。客户端与服务端通过 JWT 交互,服务端通过解密 token 信息,来实现用户认证。使用 JWT 不需要服务端集中维护 token 信息,便于扩展。JWT 也有缺点,我们可以采 ...