当前位置: 首页>編程日記>正文

Spring Cloud Security OAuth2授权模式和资源服务器

Spring Cloud Security OAuth2授权模式和资源服务器

文章目录

  • 一、授权模式
    • 1.1授权码模式
    • 1.2简化模式
    • 1.3密码模式
    • 1.4客户端模式
  • 二、资源服务器
    • 2.1 资源服务器配置
    • 2.2 测试

一、授权模式

1.1授权码模式

下图为授权码模式交互图:
在这里插入图片描述
① 资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会附加客户端的身份信息。如:http://localhost:3001/oauth/authorize?client_id=c1&response_type=code&scope=all&redirect_uri=http://www.baidu.com;

参数列表如下:

  • client_id:客户端准入标识
  • response_type:授权码模式固定为code
  • scope:客户端权限
  • redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)

②浏览器出现向授权服务器授权页面,之后将用户同意授权。

③授权服务器将授权码(AuthorizationCode)转经浏览器发送给client(通过redirect_uri)

④客户端拿着授权码向授权服务器索要访问access_token,请求如下:http://localhost:3001/oauth/token? client_id=c1&client_secret=secret&grant_type=authorization_code&code=5PgfcD&redirect_uri=http://w ww.baidu.com

⑤授权服务器返回令牌(access_token)
这种模式是四种模式中最安全的一种模式。一般用于clientWeb服务器端应用或第三方的原生App调用资源服务的时候。因为在这种模式中access_token不会经过浏览器或移动端的App,而是直接从服务端去交换,这样就最大限度的减小了令牌泄漏的风险。

测试:

浏览器访问认证页面:
http://localhost:3001/oauth/authorize?client_id=c1&response_type=code&scope=all&redirect_uri=http://www.baidu.com
在这里插入图片描述
然后输入模拟的账号和密码点登陆之后进入授权页面
在这里插入图片描述
确认授权后,浏览器会重定向到指定路径并附带授权码,最后使用该授权码获取token。
在这里插入图片描述
获取token成功:
在这里插入图片描述

1.2简化模式

下图是简化模式交互图:
在这里插入图片描述

①资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会 附加客户端的身份信息。如:http://localhost:3001/oauth/authorize?client_id=c1&response_type=token&scope=all&redirect_uri=http://www.baidu.com
参数描述同授权码模式 ,注意response_type=token

②浏览器出现向授权服务器授权页面,之后将用户同意授权。

③授权服务器将授权码将令牌(access_token)以Hash的形式存放在重定向urifragment中发送给浏览器:
在这里插入图片描述
注:fragment主要是用来标识URI所标识资源里的某个资源,在URI的末尾通过(#)作为 fragment的开头,js通过响应浏览器地址栏变化的方式能获取到fragment就行了。

简化模式用于没有服务器端的第三方单页面应用,因为没有服务器端就无法接收授权码。

1.3密码模式

下图是密码模式交互图:
在这里插入图片描述
①资源拥有者将用户名、密码发送给客户端

②客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token),请求如下:http://localhost:3001/oauth/token? client_id=c1&client_secret=123&grant_type=password&username=admin&password=admin;只支持POST请求。

参数列表如下:

  • client_id:客户端准入标识
  • client_secret:客户端秘钥
  • grant_type:授权类型,password表示密码模式
  • username:资源拥有者用户名
  • password:资源拥有者密码

③授权服务器将令牌(access_token)发送给client
在这里插入图片描述

注:这种模式意味着直接将用户敏感信息泄漏给了client,因此这就说明这种模式只能用于client是我们自己开发的情况下。因此密码模式一般用于我们自己开发的,第一方原生App或第一方单页面应用。

1.4客户端模式

下图是客户端模式交互图:
在这里插入图片描述
①客户端向授权服务器发送自己的身份信息,并请求令牌(access_token

②确认客户端身份无误后,将令牌(access_token)发送给client,请求如下:http://localhost:3001/oauth/token?client_id=c1&client_secret=123&grant_type=client_credentials,支持POST请求

参数列表如下:

  • client_id:客户端准入标识。
  • client_secret:客户端秘钥。
  • grant_type:授权类型,填写client_credentials表示客户端模式
    在这里插入图片描述
    注:这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。因此这种模式一般用来提供给我们完全信任的服务器端服务。比如,合作方系统对接,拉取一组用户信息。

二、资源服务器

代码和环境搭建忽略,详情见:https://github.com/hucheng1997/security-oauth2

2.1 资源服务器配置

资源服务器配置类继承ResourceServerConfigurerAdapter重写configure()方法:

public class ResourceServerConfigurerAdapter implements ResourceServerConfigurer {public ResourceServerConfigurerAdapter() {}public void configure(ResourceServerSecurityConfigurer resources){}public void configure(HttpSecurity http){}
}

参数为ResourceServerSecurityConfigurerconfigure()中主要配置:

  • tokenServicesResourceServerTokenServices类的实例,用来实现令牌服务
  • tokenStoreTokenStore类的实例,指定令牌如何访问,与tokenServices配置可选
  • resourceId:这个资源服务的ID,这个属性是可选的,但是推荐设置并在授权服务中进行验证。
  • 其他的拓展属性例如tokenExtractor令牌提取器用来提取请求中的令牌。

参数为HttpSecurityconfigure()中主要配置:

  • 请求匹配器,用来设置需要进行保护的资源路径,默认的情况下是保护资源服务的全部路径。
  • 通过http.authorizeRequests()来设置受保护资源的访问规则
  • 其他的自定义权限保护规则通过HttpSecurity来进行配置。

@EnableResourceServer 注解自动增加了一个类型为OAuth2AuthenticationProcessingFilter 的过滤器链。

2.2 测试

申请令牌:
在这里插入图片描述
访问资源:
在这里插入图片描述
使用错误的token访问资源:
在这里插入图片描述


https://www.fengoutiyan.com/post/15426.html

相关文章:

  • Spring Security
  • oauth2 security vue
  • 搭建oauth2授权服务器
  • 授权服务器怎么解决
  • 授权域名服务器
  • 什么情况下需要服务器
  • 服务器密码忘了怎么办
  • 客户端服务器模式
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機