我有兩個使用devise進行認證的Rails應用程序:一個網站和一個API。儘管我是這兩個應用程序的所有者,但出於很多原因,我希望兩者完全分離。當用戶在網站上註冊時,會在API端自動創建一個帳戶。我遇到的最大問題是讓用戶表在兩個應用程序之間保持同步。我最終在網站用戶模型上創建了一堆RESTful API回調,它們創建/更新了API用戶。如何基於設計加密密碼進行身份驗證?
第二部分代表登錄到網站的用戶調用API。問題是我沒有用戶的解密密碼,所以我可以進行API調用。所有的API調用都使用基本的HTTP認證。密碼被散列到數據庫中,不能解密(這是一件好事,謝謝設計)。因爲我保持所有用戶列在兩個數據庫之間同步,所以我的網站用戶encrypted_password列與我的API用戶encrypted_password列完全相同。
那麼,我有什麼選擇來解決這個問題?我正在考慮修改API,以便每個常規調用的管理員調用都需要管理員用戶名和密碼以及用戶標識(例如,獲取該用戶的事務)。或者,在兩個應用程序之間實現一個共享數據庫 - 但是我有很多用戶和其他模型之間的關聯......索引甚至會如何工作?!或者,劫持設計認證並比較encrypted_password(從我的網站)到encrypted_password(我的API) - 因爲它們完全相同;但是這會打開蠕蟲的安全防護。或者,創建密鑰身份驗證併爲用戶生成唯一的GUID ...但這樣做與解密存儲在數據庫中的密碼一樣糟糕。我討厭所有這些解決方案。也許有人有更好的主意?
感謝您的所有想法。我最終沒有共享數據庫,因爲在Rails世界中,當你考慮遷移時,這是一件很痛苦的事情。另外,我最終沒有使用JWT,因爲我已經閱讀了許多文章,他們不應該在您使用Devise時使用它們。另外,對於我來說,OmniAuth沒有意義,因爲我需要擁有所有用戶的詳細信息(姓名,地址,信用卡等),所以我無法使用Facebook/Twitter。我想生成自己的令牌,但我認爲OAuth是過度殺毒,所以我最終將simple_token_authentication與Devise集成在一起。謝謝! –
還有一點評論。我設計身份驗證的方式是這樣的:當用戶登錄到網站時,我暫時可以訪問密碼。在那短暫的時刻,我打電話給API,並要求一個令牌。然後令牌在整個網站會話中使用。它在用戶註銷時或在一段時間後過期(在API一側)。 –