OAuth_2.0
1. 1. OAuth 是什么?
OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。
2. 2. 运行流程
- 用户打开客户端以后,客户端要求用户给予授权。
- 用户同意给予客户端授权。
- 客户端使用上一步获得的授权,向认证服务器申请令牌。
- 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
- 客户端使用令牌,向资源服务器申请获取资源。
- 资源服 务器确认令牌无误,同意向客户端开放资源。
3. 3. 客户端的授权模式
客户端必须得到用户的授权,才能获得令牌。OAuth 2.0 定义了四种授权方式。
- 授权码模式
- 简化模式
- 密码模式
- 客户端模式
3.1 授权码模式
- 用户访问客户端,后者将前者导向认证服务器。
- 用户确认客户端信息并确认授权后,认证服务器将用户导向客户端事先指定的"重定向 URI",同时附上一个授权码。
- 客户端收到授权码,向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
- 认证服务器核对了授权码和重定向 URI,确认无误后,向客户端发送访问令牌。
3.2 简化模式
- 客户端将用户导向认证服务器。
- 用户确认客户端信息并确认授权后,认证服务器将用户导向客户端指定的"重定向 URI",并在 URI 的 Hash 部分包含了访问令牌。
- 因此客户端在前端可以直接拿到访问令牌。
提示
- 令牌的位置是 URL 锚点,而不是查询字符串,这是因为存在"中间人攻击"的风险,而浏览器跳转时,锚点不会发到服务器,就减少了泄漏令牌的风险。
- 这种方式把令牌直接传给前端,是很不安全的。因此,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间有效,浏览器关掉,令牌就失效了。