OAuth2简介
OAuth 2 是一个授权框架,或称授权标准,可以使第三方应用程序或客户端获得对HTTP服务上用户帐户信息的有限访问权限。 OAuth 2 通过将用户身份验证委派给托管用户帐户的服务以及授权客户端访问用户帐户进行工作。
OAuth2 角色
OAuth 2 标准中定义 以下几种角色:
资源所有者(Resource Owner):代表授权客户端访问资源信息本身的用户
资源服务器(Resource Server):托管了受保护的用户账号信息,资源服务器和授权服务器一般是两个不同的服务器,协同保护用户资源
授权服务器(Authorization Server):验证用户身份,然后提供客户端访问资源令牌
客户端(Client):访问受限资源的第三方应用(第三方应用),访问之前,必须通过用户的授权,且获得授权凭证才可进一步进行验证
OAuth2授权流程

OAuth2授权处理流程:
1、Authorization Request(发送授权请求) :客户端向用户请求对资源服务器的授权请求
2、Authorization Grant(接收授权同意) :如果用户授权该请求,则客户端会收到一个授权同意码
3、Authorization Grant(发送授权同意请求):客户端向授权服务器发送从用户处获得的授权同意码,请求访问令牌
4、Access Token(接收通过令牌):如果客户端身份被认证,且提供的授权同意码在授权服务器中验证通过,那么授权服务器向客户端发送通过令牌。
5、Access Toke(使用通过令牌):客户端向资源服务器发送从授权服务器获得的通过令牌,用于验证请求资源信息
6、Protected Resource(保护资源):如果资源服务器验证通过,则向客户端返回资源信息。
授权模式
授权模式类型取决于应用请求授权的方式和授权方服务支持的 Grant Type。OAuth 2 定义了四种 Grant Type:
- Authorization Code(授权码模式):结合普通服务器端应用使用。
- Implicit(简化模式):结合移动应用或 Web App 使用。
- Resource Owner Password Credentials(密码模式):适用于受信任客户端应用,例如同个组织的内部或外部应用。
- Client Credentials(客户端模式):适用于客户端调用主服务API型应用(比如百度API Store)
Authorization Code(授权码模式)
Authorization Code是最常使用的一种授权许可类型,它适用于第三方应用类型为Server-Side型应用的场景。
Authorization Code授权流程基于重定向跳转,客户端必须能够与User-Agent(即用户的 Web 浏览器)交互并接收通过User-Agent路由发送的Authorization Code值。

Step1:客户端发送一个Authorization Code请求,且引导user-agent跳转,即跳转到登录CSDN账号web处,OAuth2不关心认证过程
Step2:在CSDN账号登录的web页中,授权服务器提示用户授权或者拒绝第三方应用程序的访问
Step3:如果用户确认授权,客户端便能读取到authorization code值
Step4:使用authorization code和其他参数向服务器请求Access token
Step5:服务器返回请求的数据
Implicit(简化模式)
适用于移动应用和 Web App,这些应用有个特点,即Client Secret不能有效保存和信任。

Step1:客户端发送一个Authorization Code请求,且引导user-agent跳转,即跳转到登录账号web处
Step2:在账号登录的web页中,授权服务器提示用户授权或者拒绝第三方应用程序的访问
Step3:用户授予访问权限,授权服务器将user-agent重定向回客户端用之前提供的Redirect URI,并在URI中添加Access Token
Step4:user-agent遵循重定向指令,请求Redirect URI标识客户端地址,且在本地保留URI中的Access Token信息
Step5:客户端生成一个包含token的html页面,这个页面发送给user-agent,user-agent(浏览器)从中获得redirect URI和access token
Step6:浏览器向客户端发送结构提取access token
Resource Owner Password Credentials(密码模式)
Resource Owner Password Credentials适用于用户与客户端具有信任关系的情况

Step1:用户向客户提供用户名与密码作为授权凭据
Step2:客户端向授权服务器发送用户输入的授权凭证以请求access token
Step3:授权服务器对客户端进行认证并检验用户凭据的合法性,通过,向客户端发access token
Client Credentials(客户端模式)
Client Credentials是最简单的一种授权流程
客户端可以直接使用它的client credentials或其他有效认证信息向授权服务器发起获取access token的请求

616

被折叠的 条评论
为什么被折叠?



