总览
本系列针对Security-Oauth2架构的剖析,包括:oauth2.0认证架构详解、架构源码解读、核心结构配置。
本篇是对oauth2认证流程的概述,喜欢的多多pick!
内容引用书籍:The OAuth 2.0 Authorization Framework
gitHub 链接: https://github.com/vincent9309/seurity-oauth2
1.1 角色
OAuth定义了四个角色:
资源所有者
一个能够授权访问受保护资源的实体。当资源所有者是一个人时,它被称为最终用户。
资源服务器
托管受保护资源的服务器能够使用访问令牌接受和响应受保护的资源请求。
客户
代表资源所有者及其授权的应用程序进行受保护的资源请求。术语客户端并不意味着任何特定的实现特征(例如,应用程序是在服务器,台式机还是其他设备上执行的)。
授权服务器
服务器在成功认证资源所有者并获得授权后向客户端发放访问令牌。
授权服务器和资源服务器之间的交互超出了本规范的范围。授权服务器可以是与资源服务器相同的服务器或独立的实体。一个授权服务器可能会发出多个资源服务器接受的访问令牌。
1.2 协议流程
图1中所示的抽象OAuth 2.0流程描述了四个角色之间的交互,并包含以下步骤:
(A)
客户端请求资源所有者的授权。授权请求可以直接给资源所有者(如图所示),或者优选间接地通过授权服务器作为中介。
(B)
客户端接收授权许可,这是一种代表资源所有者授权的凭证,使用本规范中定义的四种授权类型之一或使用扩展授权类型表示。授权授予类型取决于客户端用于请求授权的方法以及授权服务器支持的类型。
(C)
客户端通过向授权服务器进行认证并携带授权来请求访问令牌。
(D)
授权服务器对客户端进行身份验证并验证授权,并且如果有效则发出访问令牌。
(E)
客户端从资源服务器请求受保护的资源并通过携带访问令牌进行认证。
(F)
资源服务器验证访问令牌,并且如果有效,则为该请求提供服务。
客户从资源所有者(步骤(A)和(B)中描述)获得授权许可的首选方法是使用授权服务器作为中介
2 模式
oauth2根据使用场景不同,分成了4种模式
● 客户端模式(client credentials)
● 密码模式(resource owner password credentials)
● 授权码模式(authorization code)
● 简化模式(implicit)
Oauth基于客户端与认证服务器验证的能力定义了两种客户端类型(以及,维护客户端认证信息的能力): 客户端模式、密码模式。
基础参数定义:
grant_type (发放令牌类型)、
client_id (客户端标识id)
username(用户帐号)
password (用户密码)
client_secret(客户端标识密钥)
refresh_token (刷新令牌)
scope(表示权限范围,可选项)
2.1 客户端模式
认证服务器给客户端下发客户端标识