1.OAuth2
OAuth 2.0(/'əu 'ɔːθ/)是一个用于授权的行业标准协议,它是一种协议,而不是指具体的框架。
2.为什么需要 OAuth2?用户密码不行吗?
微信管理了上亿用户,别的公司如果需要通过微信来登录应用,就需要获取微信用户的信息,腾讯不可能把微信内部系统用户名和密码告诉第三方,更不可能把数据库提供出去。
所以,不管是用户密码,还是使用key,都不太好管理,安全性都不高,这个时候需要通过 OAuth2 协议进行资源授权,通过 OAuth2 进行统一管理,颁发,吊销令牌。
3.OAuth2 应用场景
- 开放系统之间的授权
该模式整体流程为:
- 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据 code 参数。
- 通过 code 参数加上 AppID 和 AppSecret 等,通过 API 换取 Access_token。
- 通过 access_token 进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
- 微服务安全认证
- 企业系统单点登录
4.OAuth2 的4种授权模式
- 授权码模式
- 隐码授权模式
- 密码模式
- 客户端模式
5.OAuth2 运行流程
- 客户端请求用户给予授权;
- 用户同意给予客户端授权,并返回授权码;
- 客户端通过授权码再向认证服务器申请令牌;
- 认证服务器对客户端进行认证并返回令牌;
- 客户端使用令牌向资源服务器获取资源;
- 资源服务器验证令牌,并返回资源;
6.OAuth2 使用什么框架比较好
现在 Spring Security OAuth 项目也不在维护了,把将相关功能集成到了 Spring Security,并且,Spring Authorization Server 项目在2021/08/17 正式上线,所以现在可以通过 Spring Security + Spring Authorization Server 实现 OAuth2 认证。
7.OAuth2 和 JWT 区别
OAuth2 和 JWT 是两种不同的安全协议,两者作用的场景不同。
JWT 的加密 token 包含三段:
所以,JWT 不仅可以用作安全认证、单点登录,Data 域还可以用来传输数据,比如前后端分离没有 Session 的场合,可以通过 JWT 生成 token 来实现接口安全认证。
而 OAuth2 中的token不包含任何数据,仅用作认证授权,一般在第三方的资源访问授权的比较多,当然 JWT 也能实现,但是 OAuth2 在这方面更标准和广泛使用的。