理解 OAuth2 开放授权(转载)
一、OAuth协议的作用
例如我在qq上有很多的图片,图片分别保存在不同的文件夹中,现在有一个第三方登录需要访问我的其中某一个文件时ru我需要怎么做呢?如果我直接将我qq的账号、密码直接给第三方应用,那它就可以访问我的全部图片,但是有的图片我是不想给他的!而且如果我只是想让他访问一段时间,过了这个时间之后,我就不想让第三方访问了,这个时候那我只能去修改密码!想想这个工作就很繁琐而且还不安全。
所以OAuth的作用就是资源拥有者给第三方应用,我想给他的权限,而且可以控制权限的时间。
二、OAuth协议中的角色

资源所有者(Resource Owner):对资源具有授权能力的人;比如:qq用户、微信用户。
第三方应用Client:获得资源所有者的授权后可以去访问资源所有者的资源。
服务提供商:资源存放的地方;例如qq,微信;其中提供商会提供一个认证服务器和一个资源服务器。
认证服务器(Authorization Server):认证资源所有着的身份,为资源所有者提供授权审批流程,并最终颁发授权令牌(Access Token)。
资源服务器:存放具体的资源,并处理访问资源的路径;例如qq空间的相册
三、OAuth协议基本流程:

-
Client请求资源所有者的授权,请求中一般包含:要访问的资源路径,操作类型,Client的身份等信息。
-
资源所有者批准授权,并将“授权证据”发送给Client。
-
Client向认证服务器请求“访问令牌(Access Token)”。此时,Client需向认证服务器提供资源所有者的“授权证据”,以及Client自己身份的凭证。
-
认证服务器验证通过后,向Client返回“访问令牌”。访问令牌也有多种类型,若为bearer类型,那么谁持有访问令牌,谁就能访问资源。
5.认证服务器携带“访问令牌”访问资源服务器上的资源。在令牌的有效期内,Client可以多次携带令牌去访问资源。
6.资源服务器验证令牌的有效性,比如是否伪造、是否越权、是否过期,验证通过后,才能提供服务。
四、授权模式

根据上诉第二步同意授权的方式可以分为四种授权模式:授权码模式(authorization code),简化模式(implicit),密码模式(resource owner password credentials),客户端模式(client credentials)。
现在主流的提供OAuth的提供商大都是授权码模式,那么下面就说一下授权码模式的流程:
授权码模式的特点:1.用户授权是在认证服务器上完成的;2.用户同意授权后,认证服务器不是马上返回最终的令牌,而是携带的授权码,在通过第三方服务器携带授权码去换令牌,这就需要第三方应用需要有自己服务器。