一、OAuth2概述
- OAuth2是一个开放标准/开发协议,允许第三方应用访问该用户在某一网站存储的资源(头像、照片、视频)
- 并且不需要将用户的账号和密码给第三方应用,而是通过token的方式实现访问,比如常见的qq登录、微博登录、github登录等
- OAuth2是OAuth1.0协议下一版本,但是不兼容OAuth1.0
- security 对OAuth2也是有非常好的支持,后面会介绍Spring Security OAuth2
- OAuth2支持不同的授权模式,每种模式适用于不同的场景
二、OAuth2四种授权模式
1、四种授权模式概述
OAuth2有以下四种授权模式,每种授权模式应用于不同的互联网场景
- 授权码模式
- 简化模式
- 密码模式
- 客户端模式
四种授权模式的流程基本都一致的如下,只是个别步骤有所差异
A:客户端需要给用户授权
B:用户同意授权
C:客户端使用上面的授权向认证服务器获取令牌
D:认证服务器确认授权正确 下发令牌
E:客户端使用令牌访问认证服务器上的资源
F:资源服务器确认令牌正确,下发资源
2、授权码模式(重要)
常见的第三方登录(qq登录、github登录)基本都是用这种授权模式
这种也是使用最多、最完全、流程步骤最多的一种授权模式,流程如下
A:用户访问第三方应用,第三方应用通过浏览器访问认证服务器
B:用户选择是否授权
C:选择授权之后 ,认证服务器将用户导向客户端事先指定的重定向URL(redirection url),同时附上一个授权码
D:客户端收到授权码,附上上面的 重定向URL 向认证服务器申请令牌,此操作是在客户端的后端服务器完成,对用户不可见
E:认证服务器核对了授权码和重定向url之后,确认正确,下发访问令牌和更新令牌
3、简化模式
和授权码模式相比,跳过了用户授权(不需要用户授权了)直接在浏览器中想认证服务器申请令牌,令牌对访问者是可见的,且客户端不需要认证
流程如下
注意:这种模式在spring security oatuh2是没有实现的
4、密码模式
用户向客户端提供自己的账户和密码,客户端用这些信息去认证服务器索要授权。通常是用户高度信任的客户端使用这种模式认证
5、客户端模式
用户将账号和密码给客户端,客户端拿着账户和密码去认证服务器进行认证,流程如下