OAuth概念
OAuth:解决了在用户不提供密码给第三方应用的情况下,让第三方应用有权获取用户数据及基本信息的难题
Open Authorization 开放授权,是一种资源提供商用于授权第三方应用代表资源所有者获得有限访问权限的授权机制。由于整个授权过程中,第三方应用无需触及用户的密码即可取得部分资源的使用权限,所有OAuth是安全开放的。
例如登录CSDN的时候支持QQ、新浪微博、百度、开源中国和GitHub:
-
在选择QQ作为第三方登录的时候,会跳转到QQ站点(避免在CSDN中直接提交QQ密码)进行用户名和密码/二维码扫描登录验证
-
验证成功后进行授权管理,权限主要包括:自定义选择后CSDN网站之鞥能获取这一部分权限,其他隐私数据则是完全不可见
-
获取您的头像、昵称、性别
-
获取移动支付相关信息
-
-
确认授权后,跳回CSDN页面,此时用户已是登录状态
OAuth的运行流程
-
四个重要角色:
-
Resource Owner:资源所有者,通常指用户。例如每个QQ用户
-
Resource Server:资源服务器,指存放用户受保护资源的服务器,童涵春那个需要通过Access Token(访问令牌)才能进行访问。例如存储QQ用户基本信息的服务器,充当的就是资源服务器的角色
-
Client:客户端,指需要获取用户资源的第三方应用。例如CSDN
-
Authorization Server:授权服务器,用于验证资源所有者,并在验证成功后向客户端发放相关访问令牌。例如QQ授权登录页面
-
-
角色间交互:
-
客户端要求用户提供授权许可
-
用户同意向客户端提供授权许可(最关键的一步,OAuth提供四种授权模式,用于将用户的授权许可提供给客户端)
-
Authorization Code授权码模式
-
Implicit隐式授权模式
-
Password Credentials密码授权模式
-
Client Authorization客户端授权模式
-
-
客户端携带用户提供的授权许可向授权服务器申请资源服务器的访问令牌
-
授权服务器验证客户端及其携带的授权许可,确认有效后发放访问令牌
-
客户端使用访问令牌向资源服务器申请资源
-
资源服务器验证访问令牌,确认无误后向客户端提供资源
-
授权码模式
功能最完整、流程最严密的授权模式,将用户引导到授权服务器进行身份验证,授权服务器将发放的访问令牌传递给客户端。例如CSDN中的QQ登录方式就是由CSDN网站引导到QQ授权服务器进行身份验证的。