2016-11-11 45 views
0

我有一個基於Web的API,我正在構建Spring Boot中構建的API並使用OAuth2。該API適用於移動應用程序。將快速註冊集成到使用Spring Boot的現有API中使用OAuth2

作爲移動應用程序登錄的一部分,登錄選項之一是使用您的Twitter/Facebook帳戶。

我最初的想法是讓APP通過Facebook/Twitter認證用戶,然後將令牌傳遞給API。然後,API將使用Facebook/Twitter驗證令牌,收集FB/Twitter ID並使用該ID創建新帳戶。但是,這種方法的問題是,我不確定如何使用現有的OAuth庫創建持票人令牌,因爲OAuth庫在標準登錄(用戶名/密碼)期間處理所有這些。

另一種選擇是讓APP通過Facebook/Twitter對用戶進行身份驗證,然後使用用戶FB/Twitter ID作爲用戶名,通過API將用戶註冊爲正常用戶,但這種「感覺」方式不太安全,但整合更容易。

當時,認證令牌由OAuth庫存儲在MySQL數據庫表'oauth_access_token'中。我想我可以手動創建JWT並自己更新此表。

我接受任何有用的建議。

回答

0

這可能是一個更簡單的解決方案,我最初在我的問題中提出的解決方案。

1)移動應用使用Facebook/Twitter驗證用戶身份,並接收回令牌。

2)移動應用程序向我的API [/用戶/快速登錄]發送請求,傳遞終端用戶Facebook或Twitter令牌。

3)API使用Facebook/Twitter令牌從Facebook/Twitter獲取用戶詳細信息。一旦擁有用戶社交媒體ID,我們就可以使用該ID在數據庫中搜索用戶。如果不存在,請使用Facebook/Twitter返回的信息創建用戶。對於用戶密碼,我們將使用只有服務器知道的密鑰來加密用戶的Facebook/Twitter ID。密碼在被存儲在數據庫中之前再次被加密,因爲我們的所有密碼都是。這確保了用戶密碼不僅僅是他們的Facebook/Twitter ID,因爲那樣會太不安全。

4)我們的API使用電子郵件地址作爲他們的用戶名,因爲我們現在知道用戶的電子郵件地址,並且我們知道密碼是Facebook/Twitter ID的加密版本,所以我們可以向我們自己的OAuth服務器[/ oauth/token]傳遞用戶名/密碼,然後我們簡單地將該響應返回給移動應用程序。

對我來說,這似乎是最合乎邏輯的做法,尤其是因爲OAuth服務器總有可能在它自己的硬件實例上運行,並且'可能'無法直接從我們的API訪問它的類。

+0

**不要加密密碼**,當攻擊者獲取數據庫時,他也會得到加密密鑰。使用隨機鹽在HMAC上迭代大約100毫秒的持續時間,並用散列表保存鹽。使用諸如password_hash,PBKDF2,Bcrypt和類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 – zaph

+0

對不起,我應該提到。密碼使用BCrypt存儲在數據庫中,該密碼與鹽一起存儲密碼。我將使用的唯一加密方法是爲社交媒體帳戶生成密碼。如果用戶的Twitter ID是123456,我將使用加密密鑰創建一個密碼,然後將結果存儲到數據庫中,首先將它傳遞給BCrypt。顯然,如果有人想掌握項目源代碼,他們將能夠確定我們如何創建社交密碼,但我想不出另一種方式來做到這一點。 – SheppardDigital

+0

攻擊者將獲得管理員訪問您的服務器的權限,這就是攻擊的工作原理。攻擊者是專業人員,他們每天都會去工作,並在攻擊系統上工作,這是一項常規工作。他們技術嫺熟,極有可能在安全和密碼學方面擁有比您更好的技能,並擁有出色的攻擊工具。顯然你在某種程度上理解了這一點,或者你不會在服務器上使用任何加密技術。如果您有一個加密密鑰存儲在服務器上的文件中,它將被找到並使用。你可能永遠不會知道有攻擊。 – zaph

相關問題