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攻击。




