免费注册,打造高效身份管理
博客/身份安全/Authing Share|Spring Security 集成 OAuth 2.0 认证(二)
Authing Share|Spring Security 集成 OAuth 2.0 认证(二)
Authing 官方2021.12.29阅读 2380

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
(C) 认证服务器确认无误后,向客户端发放令牌

客户端凭证模式(Client Credentials)

由客户端直接向服务提供商进行认证,其实并不存在授权问题。
(A) 客户端向认证服务器提供身份凭证,并请求令牌
  • 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
(B) 认证服务器确认无误后,向客户端发放令牌

简化模式(Implicit)

不通过第三方应用的服务器,直接在浏览器中进行,不需要使用授权码。
(A) 用户通过用户代理访问客户端,客户端将其重定向到认证服务器
  • 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
(B) 用户选择是否授权给客户端
(C) 如果用户授权,认证服务器将用户重定向到客户端事先指定的 URI,并在 URI 的 Hash 部分包含访问令牌:
  • 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
(D) 浏览器向资源服务器发送请求,但不包含 Hash 值
(E)资源服务器返回一个网页,包含获取 Hash 值中令牌的代码
(F) 浏览器执行脚本,获取令牌
(G) 浏览器将令牌发送给客户端

授权过程参数

值得注意的是,不管我们使用哪一种授权方式,在三方应用申请令牌之前,都必须在系统中去申请身份唯一标识:客户端 ID(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攻击。

总结

OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,授予应用对 API 的访问权限(delegate access to APIs)。
OAuth 设定了对于 API 访问的 scope 的权限,以及支持多种授权方式,以及使用场景。OAuth 提供了更好的安全性以及便利,简化了软件系统的复杂性。
恭喜 🎉🎉🎉,到此您已经具备了 OAuth 2.0 的基础知识。同时本文也着重介绍了授权类型中的密码模式、客户端凭证模式、简化模式。
辛勤的付出,总是会有收获的哦!感谢您的阅读和支持,记得点赞哦。
下一小结,主要讲解 Spring Security 集成 OAuth 2.0  认证(三),持续关注吧,下期更精彩!

文章作者

avatar

Authing 官方

0

文章总数

authing blog rqcode
关注 Authing 公众号
随时随地发现更多内容
authing blog rqcode
添加 Authing 小助手
加入 Authing 开发者大家庭
To create a perfect identity system
Online
How do you create a complete identity system?
Communicate Now
authing
Add Wecom to receive industry information
authing
authing
Download the Authing token and experience fast login authentication!
Free Trial
Online
Phone