权限认证(二):OAuth2协议简介
- 角色
资源所有者:例如昵称和头像这些资源的拥有者
第三方应用:例如梦学谷网站要使用微信登录,梦学谷相当于微信而言就是第三方
认证服务器:用于身份认证的服务器
资源服务器:存储用户资源的服务器
服务提供商:即是资源服务器 + 服务提供商
- 认证流程
当用户在梦学谷网站使用微信登录时,即是第三方应用使用其他服务提供商进行登录时
资源所有者向认证服务器发送一个认证请求,认证服务器向资源所有者返回一个认证页面,资源所有者输入用户名和密码并提交给认证服务器
认证服务器认证成功后将一个授权码返回给客户端
第三方应用通过授权码去认证服务器,认证服务器返回一个令牌给第三方应用
第三方应用拿着令牌去资源服务器获取用户的资源信息
获取到资源信息后进行登录
- 授权方式
权码模式(Authorization Code):功能最完整,流程最严密的授权模式。国内各大服务提供商(微信、QQ、微博、淘宝 、百度)都采用此模式进行授权。可以确定是用户真正同意授权;
而且令牌是认证服务器发放给第三方应用的服务器,而不是浏览器上
简化模式(Implicit): 令牌是发放给浏览器的,oauth客户端运行在浏览器中 ,通过JS脚本去申请令牌。而不是发放给第三方应用的服务器
密码模式(Resource Owner Password Credentials):将用户名和密码传过去,直接获取 access_token 。用户同意授权动作是在第三方应用上完成 ,而不是在认证服务器上。第三方应用申请令牌时,
直接带着用户名密码去向
认证服务器申请令牌。这种方式认证服务器无法断定用户是否真的授权了,用户名密码可能是第三方应用盗取来的
客户端证书模式(Client credentials):用得少。当一个第三应用自己本身需要获取资源(而不是以用户的名义),而不是获取用户的资源时,客户端模式十分有用
-
授权码模式
-
简化模式
-
密码模式
1. 用户向客户端直接提供认证服务器平台的用户名和密码。
2. 客户端将用户名和密码发给认证服务器,向后者请求令牌。
3. 认证服务器确认无误后,向客户端提供访问令牌
- 客户端模式
1. 客户端向认证服务器进行身份认证,并要求一个访问令牌。
2. 认证服务器确认无误后,向客户端提供访问令牌