[英]Microservices authentication architecture with passport.js
我正在編寫一個玩具應用程序,用於在nodejs(expressjs)上練習微服務和身份驗證。
我有一個react客戶端,一個身份驗證服務和其他服務(他們到目前為止只回復“你好”)。
這個想法是未經身份驗證的客戶端通過單擊Twitter按鈕(SSO)進入身份驗證服務。 然后,auth服務獲取生成的twitter誓言令牌,並在redis存儲中設置此令牌。 然后,其他服務可以訪問該令牌,以便通過檢查請求是否已經存在於redis存儲中來知道它是否已經過身份驗證(如果用戶刪除了其帳戶,它也將從redis存儲中刪除) 。 經過身份驗證后,我會在客戶端之間來回發送Twitter令牌。
我發現這種方法非常簡單(其他人使用nginx代理進行身份驗證,但我認為沒有理由,除非服務托管在不同的域中,但我不太了解它)所以我很擔心我是例如,缺少關於安全性的東西。
問題:
使用這種方法,您將必須在所有服務中驗證令牌,如果您對此可以,那么您可能沒問題。
Twitter訪問令牌可能具有到期時間,這將使得必須使用刷新令牌從auth服務獲取新的訪問令牌:
在我最近的任務中,我編寫了一個代理所有令牌的微服務,使用這種方法,我的代理處理從auth到角色的所有內容,並發送401用於過期的令牌和撤銷刷新令牌等。我認為這讓我更加分離了關注點。
重要說明:在上面的刷新令牌場景中,我的代理只會遇到無效/過期的accessstoken加載,而在您的場景中,任何服務都可以通過無效令牌到達...
另一種方法是讓Service-A和Service-B調用auth服務來驗證令牌,但這會推斷服務之間的更多流量,因為每個帶有令牌的HTTP請求都必須經過驗證。 在這種情況下,無效的令牌請求也會到達您的服務X,從而推斷出一些負載......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.