Spring Security深入淺出--4、Spring Social簡介以及OAuth運行流程及開發QQ登陸(上)

目錄

 

使用Spring Social開發第三方登陸

OAuth協議簡介

OAuth運行流程

授權模式

Spring Social簡介

開發QQ登陸


項目地址:鏈接:https://pan.baidu.com/s/106lZU8P9gHG4A3aP4OpOgQ
提取碼:xs3v

使用Spring Social開發第三方登陸

OAuth協議簡介

 

以前的邏輯是通過微信用戶密碼登陸,獲取微信的用戶數據,但是這種方式存在的數據泄露的危險。

由於本來該軟件中本身就是只需要用戶的登陸數據,但是通過密碼登陸獲取額外的數據。所以不安全。

所以不是將用戶密碼交給微信端,而是將一個令牌交過去。

OAuth運行流程

 

授權模式

授權碼模式(web系統認證)

密碼模式(app系統認證使用)

客戶端模、簡化模式(使用較少)

Spring Social簡介

簡單來說,在第六步獲取到用戶信息之後,根據用戶信息構建Authentication並放入SecurityContext裏面,SecurityContext在源碼分析的時候應該已經瞭解了,它的作用就是講認證成功的Authentication保存到session裏面。

在spring security框架中,就是增加了一個SocialAuthenticationFilter類來攔截處理第三方請求。

 具體的邏輯實現:連接第三方的類是connection,裏面實現的serviceProvider中主要是兩個接口OAuth2Operations(連接第三方),Api(AbstractOAuth2ApiBinding)用來適配獲取的數據。在通過ApiAdapter適配對應的DB數據

開發QQ登陸

創建需要的接口

以下都是右邊核心代碼(ServiceProvider)

 以上都是應用商需要的代碼

開始編寫中間的代碼

現在還需要將數據保存到數據庫當中,也就是最左邊的數據庫那塊

在數據庫中創建userconnection表

 表的前綴添加“mxl_”,也就是說數據庫那邊的表前面加了該前綴就必須寫沒加就不設置該屬性

 接下來如何將上面的userid轉換成用戶信息呢

在之前的UserDetailsService中,用來驗證用戶的密碼是否正確,然後就認證的數據放入到session裏面

 而第三方認證這裏也同樣的原理,提供了SocialUserDetailsService

首先解釋一下loadUserByUsername()方法,處理的是表單傳進來的數據

而loadUserByUserId()方法是第三方登陸的時候用的,傳進來的是通過第三方傳進來的userId

該方法返回的SocialUserDetails就是UserDetails的實現

 創建QQProperties類

在連接類那裏我們需要使用到這三個參數

只有imooc.security.social.qq.app-id配置了該配置項纔會生效

在qq互聯裏面查看

添加social過濾器

添加到配置中

頁面修改

所有的/auth請求都會被SocialAuthenticationFilter攔截

/qq中的qq就是傳入的providerid的值

這個時候登陸還是有問題的

發佈了483 篇原創文章 · 獲贊 104 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章