![2dfd091aa2ed6e1e2df65f66b255a5c5.png](https://img-blog.csdnimg.cn/img_convert/2dfd091aa2ed6e1e2df65f66b255a5c5.png)
在了解 Oauth 2.0 之前,我们先看一下令牌和密码到底有什么关系,其实令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异:
- 令牌是短期的,到期会自动失效,且用户自己无法修改;密码一般长期有效,用户不修改,就不会发生变化。
- 令牌可以被数据的所有者撤销,会立即失效。
- 令牌有权限范围(scope)对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。
上面这些设计,保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。
但是需要注意:只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。这也是为什么令牌的有效期,一般都设置得很短的原因。
什么是Oauth 2.0
OAuth 2.0 是一种授权机制,主要用来颁发令牌(token).
OAuth 2.0 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。待资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去资源服务器请求数据。
- RFC开放标准文件:https://tools.ietf.org/html/rfc6749
1. 应用场景
(1)第三方应用授权登录
在APP或者网页接入一些第三方应用时,时长需要用户登录另外一个合作平台,比如:QQ、微博、微信、Github、码云等授权登录。
下面以登录基于码云存储的图床案例进行分析:
- 图床地址:http://image.kevinlu98.cn/
- 码云授权第三方服务应用:https://gitee.com/oauth/applications
(2)原生APP 授权
app登录请求后台接口,为了安全认证,所有请求都带token信息,如果登录验证、请求后台数据。
(3)前后单分离单页面应用
前后端分离框架,前端请求后台数据,需要进行oauth2安全认证,比如使用vue、react后者h5开发的app。
2. 名词说明
- 第三方应用:本文中又称"客户端"(client),比如打开知乎,使用第三方登录,选择qq登录,这时候知乎就是客户端。
- HTTP service:HTTP服务提供商,简称"服务提供商",即上例的qq。
- 资源所有者(Resource Owner):也就是登录用户
- 用户代理(user agent):也就是浏览器
- 认证服务(Authorization server):服务提供商专门用来处理认证的服务器
- 资源服务器(Resou