我有一個基於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並自己更新此表。
我接受任何有用的建議。
**不要加密密碼**,當攻擊者獲取數據庫時,他也會得到加密密鑰。使用隨機鹽在HMAC上迭代大約100毫秒的持續時間,並用散列表保存鹽。使用諸如password_hash,PBKDF2,Bcrypt和類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 – zaph
對不起,我應該提到。密碼使用BCrypt存儲在數據庫中,該密碼與鹽一起存儲密碼。我將使用的唯一加密方法是爲社交媒體帳戶生成密碼。如果用戶的Twitter ID是123456,我將使用加密密鑰創建一個密碼,然後將結果存儲到數據庫中,首先將它傳遞給BCrypt。顯然,如果有人想掌握項目源代碼,他們將能夠確定我們如何創建社交密碼,但我想不出另一種方式來做到這一點。 – SheppardDigital
攻擊者將獲得管理員訪問您的服務器的權限,這就是攻擊的工作原理。攻擊者是專業人員,他們每天都會去工作,並在攻擊系統上工作,這是一項常規工作。他們技術嫺熟,極有可能在安全和密碼學方面擁有比您更好的技能,並擁有出色的攻擊工具。顯然你在某種程度上理解了這一點,或者你不會在服務器上使用任何加密技術。如果您有一個加密密鑰存儲在服務器上的文件中,它將被找到並使用。你可能永遠不會知道有攻擊。 – zaph