1. 程式人生 > >基於spring-security-oauth2實現單點登入(持續更新)

基於spring-security-oauth2實現單點登入(持續更新)


##基於spring-security-實現資料庫版##

文章程式碼地址:[連結描述][1]可以下載直接執行,基於springboot2.1.5,springcloud Greenwich版本實現。前面兩篇寫了認證oauth2通過記憶體
還有jdbc實現認證中心。接下來我們採用oauth2實現管理系統的單點登入。


說到這裡,需要介紹幾個註解:
@EnableAuthorizationServer 該註解用來開啟認證服務,使用該註解表明自己是一個認證服務。
@EnableResourceServer 該註解要用來開啟資源保護,表明自己是資源伺服器受認證服務保護。
@EnableOAuth2Sso 該註解表示自己是oauth2客戶端,也即單點登入客戶端

@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
spring-security預設禁用註解,使用該註解來判斷使用者對某個控制層的方法是否具有訪問許可權


好來,註解介紹完了,閒話少說。我們開始今天的主題“單點登入”。

(1)建立sso-client專案,修改maven依賴:

因為,是web專案需要新增maven依賴。
(2)在啟動類加上@EnableOAuth2Sso註解,表明自己是客戶端

(3)下面進行最重要的,設定配置檔案

因為,前面幾個配置在之前章節介紹過,這裡只介紹server.servlet.session.cookie.name=OAUTH2SESSION這個配置。

這是個坑,我在沒加這個配置之前,授權成功後,還是跳轉授權登入頁碼。認證伺服器和瀏覽器控制檯也沒有報錯資訊。只好debug一點點差錯。
這裡簡單介紹下如何查閱原始碼,首先全域性搜尋自己的配置
security.oauth2.client.user-authorization-uri=http://localhost:9001/oauth/authorize 因為這個地址是認證伺服器請求授權的,所以,請求認證的過濾器肯定包含他。搜尋的結果如下:

兩個結果,一個是我們自己配置的忽略,點開另外一個:

ok我們在原始碼中找到這個類,一直向上找,可以找到OAuth2RestTemplate
同樣的,我們可以搜尋這個地址,查詢在認證伺服器中是如何認證的。

跑偏了,還是介紹下這個配置吧,通過這個配置session和認證伺服器不一樣結局。也可以設定上下文路徑
server.servlet.context-path=/sso-client
(4)調回來,下來我們建立一個controller檔案,用來獲取授權使用者資訊:

在template下建立index.html歡迎頁面:

(5)啟動客戶端服務:

(6)因為,我們需要請求認證伺服器,校驗token,因此認證伺服器需要開啟/oauth/token路徑,修改WebSecurityConfig檔案新增:

(7)啟動認證服務,訪問客戶端首頁: http://localhost:9005 如下:

自動跳轉到認證伺服器登入地址,輸入使用者名稱: admin 密碼: 123456 登入

你可以把專案修改埠啟動試試,登入一個另一個不在需要登入。


未完待續,下一篇介紹資源伺服器和認證伺服器的整合。 有