Spring cloud微服務安全實戰-4-5搭建OAuth2認證服務器


現在可以訪問我們的認證服務器,應用我們已經配置好了。

下面配置讓用戶可以訪問我的認證服務器。再來重寫一個方法。


EndpointConfigure端點的配置。

authenticationManager用來校驗,我們傳進來的用戶信息是不是合法的

authenticationManager那么它從哪來呢?注入進來。

單獨寫一個類來配置。

繼承這個類 WebSecurityConfigurerAdapter, 這是web應用的安全配置的適配器。


同樣在上面要寫兩個注解,@EnableWebSecurity讓安全配置生效。


在這里就是要配置AuthenticationManager,讓認證服務器知道用AuthenticationManager識別我的用戶,是否是有效的用戶。重寫覆蓋相應的方法。

參數是AuthenticationManagerBuilder它就是用來幫我們構建 AuthenticationManager的

要構建AuthenticationManager 需要兩個東西,第一是userDetailService

注入進來。這些都是SpringSecurity里面定義的接口。

來看下UserDetailsService

里面只有一個方法叫做loadUserByUserName。這個方法的作用就是通過用戶名來獲取詳細的用戶信息。一般情況下這個接口的實現類需要我們自己去寫。在實現類里面通過去查詢數據庫拿着這個用戶名。查出相關的用戶信息來。


如果查不到用戶,就拋出UsernameNotFundException

查詢的用戶信息封裝到一個對象里面。這個對象需要實現 UserDetails接口。



下面來看下AuthenticationManager這個接口。

AuthenticationManager這個接口。也只有一個方法

參數Authenticaiton封裝的認證的信息。不同的認證方式發的信息不一樣。比如說用戶名密碼的認證就要發用戶名和密碼,如果是Oauth協議就要發cientId、 ClientSecret。
不同的認證方式會有不同的Authentication接口的實現。
以上兩個接口都是Spring Security框架內提供的 ,剛幫我們完成用戶的認證的過程。這門課主要講怎么去用這個東西,怎么組合起來去解決實際應用中的問題。如果想要了解底層原理 可以去看另外一門課。

passwordEncoder直接聲明了. 下面直接調用這個方法。

注意這里只是配置了AuthenticationManager,怎么來組裝AuthenticationManager 並沒有暴露成一個Spring的Bean。還需要再寫一步,覆蓋掉authenticationManangerBean這個方法


這個方法就是專門用來給你暴露AuthenticationManager 的


可以看一下源碼,用了一個委托,傳了一個authenticationBuilder過去。


參數builder是我們在這里配置的

這樣我們在認證服務里面注入的 AuthenticationManager就是我剛才暴露出來的Bean

同樣的注入的passwordEncoder也是這里配置的。

還缺一個組件就是這個UserDetailsService

創建UserDetailsService


userDetialsSercice是用來根據用戶名獲取用戶的詳細信息的


繼承UserDetailsService的接口。

加上注解@Component

理論上這里應該是要去讀取數據庫的,這里我們為了簡單的演示,先把用戶的信息寫死,。

為了方便我們寫代碼,Spring也提供了一些工具類。它來幫助我們構建用戶信息

UserDetails是一個接口,它用來封裝Spring Security所需要的用戶信息。


withUserName的返回是是一個UserBuilder


真正的業務場景下,這里一定是要讀數據庫的。數據庫里面 拿出來的密碼一定是密文的。所以這里把密碼加密后設置到這個密碼里。

這個人擁有的權限,可以理解為一種角色。這就是構建用戶所必需的的三個屬性。用戶名、密碼、權限、


三個都設置好后,調用build方法。他就會用這些信息構建出用戶信息返回回去。

我們在做測試的時候,用戶名是什么無所謂,。但是密碼一定要是 123456

這里是合法的應用信息

最后一個配置

最后一個問題訂單服務去找認證服務,驗證令牌。認證服務器這里需要做一個配置。就是誰能找我驗這個令牌。或者說驗這個令牌 需要什么樣的條件。


重寫AuthorizationServerSecurityConfigurer的配置

用來檢查token的這個服務的訪問規則,

這里我們直接寫一個權限表達式。表示驗證token 一定是要帶着身份認證的,也就是帶着用戶名和密碼

用戶名要是oderApp 面是123456 或者 用戶名是orderService密碼是123456。必須要帶着些信息來驗證你的token,我才給你驗。如果你隨便發一個請求來驗證token,不能驗。

啟動測試

啟動認證服務


獲取token發post請求

同時要攜帶一些信息。用httpBasic傳遞,哪個應用要申請令牌。這樣他就知道是orderApp這各應用去申請令牌。



再加一個授權類型,這個接口上支持四中授權類型



scope我希望在這個令牌里面包含什么樣的權限。希望這個令牌里 包含讀寫的權限。注意這里用空格隔開,

可以寫的單詞一定是在scopes這里聲明過的單詞。





fly是scopes里面沒有聲明過的


如果密碼故意寫錯

無效的授權。 錯誤的證書。


如果basic的信息傳錯了。

就會要求你重新填這個用戶名密碼。 一定要填正確了 才可以。

這就是用password這種方式,申請令牌的標准的請求,。

結束

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM