01
集成介绍
在上一篇文章《 Authing Share|Spring Security 集成 OAuth 2.0 认证(一)》(以下简称《认证(一)》)中我们讲解了很多的基础知识和概念,包括 OAuth 2.0 概述、协议特点、应用场景以及该协议中几种角色和实体的定义。
同时,认证(一)也着重讲解了四种授权类型中的授权码模式,从客户端访问开始,一直到验证授权码和 URI,确认无误后,向客户端发放令牌的整个流程。篇末也介绍了 OAuth 2.0 刷新令牌的机制。
相信认证(一)已经让大家对 OAuth 2.0 有了一定的了解,接下来,本文将继续讲解 OAuth 2.0 的其他几种授权类型。
02
知识储备学习
授权类型
密码凭证模式(Resource Owner Password Credentials)
用户必须向客户端提供用户名和密码,存在较大的风险。通常只有在认证服务器无法通过其他方式进行授权时,才会考虑使用此种模式。
(A) 用户向客户端提供用户名和密码凭证。
(B) 客户端将用户名和密码凭证发送给认证服务器,并请求令牌。
-
grant_type:表示授权类型,必选项,此种模式固定为 “password”
-
username:表示用户名,必选项
-
password:表示密码,必选项
-
scope:表示权限范围,可选项
实例:
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=authing&password=authing
客户端凭证模式(Client Credentials)

-
grant_type:表示授权类型,必选项,此种模式固定为 “client_credentials”
-
scope:表示权限范围,可选项
实例:
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
简化模式(Implicit)

-
response_type:表示授权类型,必选项,此种模式固定为 “token”
-
client_id:表示客户端 ID,必选项
-
redirect_uri:表示重定向 URI,可选项
-
scope:表示申请的权限范围,可选项
-
state:表示客户端当前状态,可选项
实例:
GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
HTTP/1.1 Host: server.example.com
-
access_token:表示访问令牌,必选项
-
token_type:表示令牌类型,必选项
-
expires_in:表示过期时间,单位为秒。如果省略,则其他方式必须设置
-
scope:表示申请的权限范围,可选项
-
state:表示客户端的状态
实例:
HTTP/1.1 302 Found
Location: http://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA
&state=xyz&token_type=example&expires_in=3600
授权过程参数
client ID
)和 客户端密钥(client secret
),这样做可以保证 token
不被恶意使用。OAuth 2.0 授权过程中几个重要的参数:
-
response_type
:code 表示要求返回授权码,token 表示直接返回令牌
-
client_id
:客户端身份标识
-
client_secret
:客户端密钥
-
redirect_uri
:重定向地址
-
scope
:表示授权的范围,read
只读权限,all
读写权限
-
grant_type
:表示授权的方式,AUTHORIZATION_CODE
(授权码)、password
(密码)、client_credentials
(凭证式)、refresh_token
更新令牌 -
state
:应用程序传递的一个随机数,用来防止CSRF
攻击。