javascript
Spring Security OAuth笔记
因為工作需要,系統權限安全方面可能要用到Spring Security OAuth2.0,所以,近幾天了解了一下OAuth相關的東西。目前好像還沒有系統的學習資料,學習主要是通過博客,內容都是大同小異而且講述的比較亂,可能還摻雜了一些個人不夠全面的理解,所以有必要的話后面還得自己查看源碼。
本來說寫個demo先用起來試試,但是在用的時候遇到了一些問題暫時還沒找到原因,因為Spring Security OAuth是基于Spring Security的,可能得去看一下Security的內容才能解決這些問題,所以這篇博客只是簡單記錄一下近幾天學習到的內容。
網上普遍都用了一個“云沖印”的例子來說明OAuth的應用場景,就是第三方登錄,比如在某個網站使用QQ登錄、微博登錄、微信登錄等都屬于OAuth的體現,就是讓該網站獲取賬號的一些數據或者執行一些操作,但是不泄露賬號密碼等重要信息來保證賬號安全。OAuth2授權已然是互聯網開放平臺的統一標配。除了第三方登錄,還通常應用在微服務架構中各服務間的調用,保證服務間的安全性。
OAuth推薦可以看看這篇博客:理解OAuth 2.0
OAuth2.0分為兩個部分:
- 1、認證服務器 Authorization Service
認證服務器負責對客戶端進行認證授權,為客戶端頒發令牌(token),OAuth2.0提供了4種授權模式。客戶端必須得到用戶的授權,才能獲得令牌,OAuth2.0還提供了刷新令牌的功能。
?
- 2、資源服務器 Resource Service
資源服務器提供了一些受token令牌保護的資源,資源服務器通過對token進行驗證來判斷是否允許客戶端的訪問操作。
?
一、在項目中使用需要添加以下maven依賴:
?
二、配置認證服務器
?
?
配置認證服務器需要重寫AuthorizationServerConfigurerAdapter中的配置方法,用 @EnableAuthorizationServer 注解來配置OAuth2.0 授權服務機制,重寫用@Bean注解的幾個configure方法一起來配置這個授權服務。包括以下3個配置項: ?- ClientDetailsServiceConfigurer:用來配置客戶端詳情(ClientDetailsService),客戶端詳情信息在這里進行初始化,可以使用內存或者JDBC來存儲調取詳情信息。
它是AuthorizationServerConfigurer 的一個回調配置項,配置時有以下幾個重要的屬性:
?
clientId:(必須的)用來標識客戶的Id。
secret:(需要值得信任的客戶端)客戶端安全碼,如果有的話。
scope:用來限制客戶端的訪問范圍,如果為空(默認)的話,那么客戶端擁有全部的訪問范圍。
authorizedGrantTypes:此客戶端可以使用的授權類型,默認為空。
authorities:此客戶端可以使用的權限(基于Spring Security authorities)。
?
- AuthorizationServerSecurityConfigurer:用來配置令牌端點(Token Endpoint)的安全約束。
- AuthorizationServerEndpointsConfigurer:用來配置授權(authorization)以及令牌(token)的訪問端點和令牌服務(token services)。
?
這個配置對象是AuthorizationServerConfigurer的一個回調配置項,有一個叫做 pathMapping() 的方法用來配置端點URL鏈接,它有兩個參數:
?
第一個參數:這個端點URL的默認鏈接(String)。
第二個參數:你要進行替代的URL鏈接(String)。
?
框架的默認URL鏈接如下列表,可以作為這個 pathMapping() 方法的第一個參數:
?
/oauth/authorize:授權端點,這個URL應該被Spring Security保護起來只供授權用戶訪問。
/oauth/token:令牌端點。
/oauth/confirm_access:用戶確認授權提交端點。
/oauth/error:授權服務錯誤信息端點。
/oauth/check_token:用于資源服務訪問的令牌解析端點。
/oauth/token_key:提供公有密匙的端點,如果你使用JWT令牌的話。
?
二、配置資源服務器
?
?
配置資源服務器必須通過 @EnableResourceServer 注解到一個 @Configuration 配置類上,并且必須使用 ResourceServerConfigurer 這個配置對象來進行配置,(這里選擇繼承自 ResourceServerConfigurerAdapter 然后重寫其中的方法,參數就是這個對象的實例),@EnableResourceServer 注解自動增加了一個類型為 OAuth2AuthenticationProcessingFilter 的過濾器鏈。下面是一些可以配置的屬性:
?
tokenServices:ResourceServerTokenServices 類的實例,用來實現令牌服務。
resourceId:這個資源服務的ID,這個屬性是可選的,但是推薦設置并在授權服務中進行驗證。
其他的拓展屬性:例如 tokenExtractor 令牌提取器用來提取請求中的令牌。
請求匹配器:用來設置需要進行保護的資源路徑,默認的情況下是受保護資源服務的全部路徑。
受保護資源的訪問規則:默認的規則是簡單的身份驗證(plain authenticated)。
其他的自定義權限保護規則:通過 HttpSecurity 來進行配置。
?
因為Spring Security OAuth是基于Spring Security的,所以還需要配置Spring Security。到目前為止,配置還是存在一些問題的,初步認為是和Spring Security有關,所以這部分配置后面弄清楚了再說。
轉載于:https://www.cnblogs.com/Mr-XiaoLiu/p/9796240.html
總結
以上是生活随笔為你收集整理的Spring Security OAuth笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据科学家常用的十大机器学习算法,都在这
- 下一篇: 从零开始学习hadoop之发行版选择