現在可以訪問我們的認證服務器,應用我們已經配置好了。
下面配置讓用戶可以訪問我的認證服務器。再來重寫一個方法。
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這種方式,申請令牌的標准的請求,。
結束