當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
OAuth2.0学习(2-1)Spring Security OAuth2.0 开发指南
生活随笔
收集整理的這篇文章主要介紹了
OAuth2.0学习(2-1)Spring Security OAuth2.0 开发指南
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
開發指南:http://www.cnblogs.com/xingxueliao/p/5911292.html Spring OAuth2.0 提供者實現原理:
Spring OAuth2.0提供者實際上分為:
配置一個授權服務,你需要考慮幾種授權類型(Grant Type),不同的授權類型為客戶端(Client)提供了不同的獲取令牌(Token)方式,為了實現并確定這幾種授權,需要配置使用 ClientDetailsService 和 TokenService 來開啟或者禁用這幾種授權機制。到這里就請注意了,不管你使用什么樣的授權類型(Grant Type),每一個客戶端(Client)都能夠通過明確的配置以及權限來實現不同的授權訪問機制。這也就是說,假如你提供了一個支持"client_credentials"的授權方式,并不意味著客戶端就需要使用這種方式來獲得授權。下面是幾種授權類型的列表,具體授權機制的含義可以參見RFC6749(中文版本):
一個資源服務(可以和授權服務在同一個應用中,當然也可以分離開成為兩個不同的應用程序)提供一些受token令牌保護的資源,Spring OAuth提供者是通過Spring Security authentication filter 即驗證過濾器來實現的保護,你可以通過 @EnableResourceServer 注解到一個 @Configuration 配置類上,并且必須使用 ResourceServerConfigurer 這個配置對象來進行配置(可以選擇繼承自 ResourceServerConfigurerAdapter 然后覆寫其中的方法,參數就是這個對象的實例),下面是一些可以配置的屬性:
.checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')"); }
Spring OAuth2.0提供者實際上分為:
- 授權服務 Authorization Service.
- 資源服務 Resource Service.
- AuthorizationEndpoint:用來作為請求者獲得授權的服務,默認的URL是/oauth/authorize.
- TokenEndpoint:用來作為請求者獲得令牌(Token)的服務,默認的URL是/oauth/token.
- OAuth2AuthenticationProcessingFilter:用來作為認證令牌(Token)的一個處理流程過濾器。只有當過濾器通過之后,請求者才能獲得受保護的資源。
配置一個授權服務,你需要考慮幾種授權類型(Grant Type),不同的授權類型為客戶端(Client)提供了不同的獲取令牌(Token)方式,為了實現并確定這幾種授權,需要配置使用 ClientDetailsService 和 TokenService 來開啟或者禁用這幾種授權機制。到這里就請注意了,不管你使用什么樣的授權類型(Grant Type),每一個客戶端(Client)都能夠通過明確的配置以及權限來實現不同的授權訪問機制。這也就是說,假如你提供了一個支持"client_credentials"的授權方式,并不意味著客戶端就需要使用這種方式來獲得授權。下面是幾種授權類型的列表,具體授權機制的含義可以參見RFC6749(中文版本):
- authorization_code:授權碼類型。
- implicit:隱式授權類型。
- password:資源所有者(即用戶)密碼類型。
- client_credentials:客戶端憑據(客戶端ID以及Key)類型。
- refresh_token:通過以上授權獲得的刷新令牌來獲取新的令牌。
- ClientDetailsServiceConfigurer:用來配置客戶端詳情服務(ClientDetailsService),客戶端詳情信息在這里進行初始化,你能夠把客戶端詳情信息寫死在這里或者是通過數據庫來存儲調取詳情信息。
- AuthorizationServerSecurityConfigurer:用來配置令牌端點(Token Endpoint)的安全約束.
- AuthorizationServerEndpointsConfigurer:用來配置授權(authorization)以及令牌(token)的訪問端點和令牌服務(token services)。
- clientId:(必須的)用來標識客戶的Id。
- secret:(需要值得信任的客戶端)客戶端安全碼,如果有的話。
- scope:用來限制客戶端的訪問范圍,如果為空(默認)的話,那么客戶端擁有全部的訪問范圍。
- authorizedGrantTypes:此客戶端可以使用的授權類型,默認為空。
- authorities:此客戶端可以使用的權限(基于Spring Security authorities)。
- 當一個令牌被創建了,你必須對其進行保存,這樣當一個客戶端使用這個令牌對資源服務進行請求的時候才能夠引用這個令牌。
- 當一個令牌是有效的時候,它可以被用來加載身份信息,里面包含了這個令牌的相關權限。
- InMemoryTokenStore:這個版本的實現是被默認采用的,它可以完美的工作在單服務器上(即訪問并發量壓力不大的情況下,并且它在失敗的時候不會進行備份),大多數的項目都可以使用這個版本的實現來進行嘗試,你可以在開發的時候使用它來進行管理,因為不會被保存到磁盤中,所以更易于調試。
- JdbcTokenStore:這是一個基于JDBC的實現版本,令牌會被保存進關系型數據庫。使用這個版本的實現時,你可以在不同的服務器之間共享令牌信息,使用這個版本的時候請注意把"spring-jdbc"這個依賴加入到你的classpath當中。
- JwtTokenStore:這個版本的全稱是 JSON Web Token(JWT),它可以把令牌相關的數據進行編碼(因此對于后端服務來說,它不需要進行存儲,這將是一個重大優勢),但是它有一個缺點,那就是撤銷一個已經授權令牌將會非常困難,所以它通常用來處理一個生命周期較短的令牌以及撤銷刷新令牌(refresh_token)。另外一個缺點就是這個令牌占用的空間會比較大,如果你加入了比較多用戶憑證信息。JwtTokenStore 不會保存任何數據,但是它在轉換令牌值以及授權信息方面與 DefaultTokenServices 所扮演的角色是一樣的。
- authenticationManager:認證管理器,當你選擇了資源所有者密碼(password)授權類型的時候,請設置這個屬性注入一個 AuthenticationManager 對象。
- userDetailsService:如果啊,你設置了這個屬性的話,那說明你有一個自己的 UserDetailsService 接口的實現,或者你可以把這個東西設置到全局域上面去(例如 GlobalAuthenticationManagerConfigurer 這個配置對象),當你設置了這個之后,那么 "refresh_token" 即刷新令牌授權類型模式的流程中就會包含一個檢查,用來確保這個賬號是否仍然有效,假如說你禁用了這個賬戶的話。
- authorizationCodeServices:這個屬性是用來設置授權碼服務的(即 AuthorizationCodeServices 的實例對象),主要用于 "authorization_code" 授權碼類型模式。
- implicitGrantService:這個屬性用于設置隱式授權模式,用來管理隱式授權模式的狀態。
- tokenGranter:這個屬性就很牛B了,當你設置了這個東西(即 TokenGranter 接口實現),那么授權將會交由你來完全掌控,并且會忽略掉上面的這幾個屬性,這個屬性一般是用作拓展用途的,即標準的四種授權模式已經滿足不了你的需求的時候,才會考慮使用這個。
- 第一個參數:String 類型的,這個端點URL的默認鏈接。
- 第二個參數:String 類型的,你要進行替代的URL鏈接。
- /oauth/authorize:授權端點。
- /oauth/token:令牌端點。
- /oauth/confirm_access:用戶確認授權提交端點。
- /oauth/error:授權服務錯誤信息端點。
- /oauth/check_token:用于資源服務訪問的令牌解析端點。
- /oauth/token_key:提供公有密匙的端點,如果你使用JWT令牌的話。
一個資源服務(可以和授權服務在同一個應用中,當然也可以分離開成為兩個不同的應用程序)提供一些受token令牌保護的資源,Spring OAuth提供者是通過Spring Security authentication filter 即驗證過濾器來實現的保護,你可以通過 @EnableResourceServer 注解到一個 @Configuration 配置類上,并且必須使用 ResourceServerConfigurer 這個配置對象來進行配置(可以選擇繼承自 ResourceServerConfigurerAdapter 然后覆寫其中的方法,參數就是這個對象的實例),下面是一些可以配置的屬性:
- tokenServices:ResourceServerTokenServices 類的實例,用來實現令牌服務。
- resourceId:這個資源服務的ID,這個屬性是可選的,但是推薦設置并在授權服務中進行驗證。
- 其他的拓展屬性例如 tokenExtractor 令牌提取器用來提取請求中的令牌。
- 請求匹配器,用來設置需要進行保護的資源路徑,默認的情況下是受保護資源服務的全部路徑。
- 受保護資源的訪問規則,默認的規則是簡單的身份驗證(plain authenticated)。
- 其他的自定義權限保護規則通過 HttpSecurity 來進行配置。
.checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')"); }
?
在這個例子中,我們配置了 /oauth/check_token 和 /oauth/token_key 這兩個端點(受信任的資源服務能夠獲取到公有密匙,這是為了驗證JWT令牌)。這兩個端點使用了HTTP Basic Authentication 即HTTP基本身份驗證,使用 client_credentials 授權模式可以做到這一點。 配置OAuth-Aware表達式處理器(OAuth-Aware Expression Handler): 你也許希望使用 Spring Security's expression-based access control 來獲得一些優勢,一個表達式處理器會被注冊到默認的 @EnableResourceServer 配置中,這個表達式包含了 #oauth2.clientHasRole,#oauth2.clientHasAnyRole 以及 #oauth2.denyClient 所提供的方法來幫助你使用權限角色相關的功能(在 OAuth2SecurityExpressionMethods 中有完整的列表)。 在XML配置中你可以注冊一個 OAuth-Aware 表達式處理器即 <expression-handler />元素標簽到 常規的 <http /> 安全配置上。轉載于:https://www.cnblogs.com/lexiaofei/p/7028788.html
總結
以上是生活随笔為你收集整理的OAuth2.0学习(2-1)Spring Security OAuth2.0 开发指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse中将java类打成jar包
- 下一篇: SpringMVC路径匹配规则AntPa