1. 單點登錄(SSO)
這種方案意味著每個面向用戶的服務都必須與認證服務交互跨跨,這會產(chǎn)生大量非秤掠ぃ瑣碎的網(wǎng)絡流量和重復的工作嘱腥,當動輒數(shù)十個微應用時,這種方案的弊端會更加明顯橱脸。
2. 分布式 Session 方案
分布式會話方案原理主要是將關于用戶認證的信息存儲在共享存儲中添诉,且通常由用戶會話作為 key 來實現(xiàn)的簡單分布式哈希映射栏赴。當用戶訪問微服務時靖秩,用戶數(shù)據(jù)可以從共享存儲中獲取沟突。在某些場景下惠拭,這種方案很不錯,用戶登錄狀態(tài)是不透明的棒呛。同時也是一個高可用且可擴展的解決方案条霜。這種方案的缺點在于共享存儲需要一定保護機制宰睡,因此需要通過安全鏈接來訪問拆内,這時解決方案的實現(xiàn)就通常具有相當高的復雜性了。
3. 客戶端 Token 方案
令牌在客戶端生成灵巧,由身份驗證服務進行簽名刻肄,并且必須包含足夠的信息敏弃,以便可以在所有微服務中建立用戶身份噪馏。令牌會附加到每個請求上欠肾,為微服務提供用戶身份驗證刺桃,這種解決方案的安全性相對較好,但身份驗證注銷是一個大問題廓啊,緩解這種情況的方法可以使用短期令牌和頻繁檢查認證服務等。對于客戶端令牌的編碼方案吹埠,Borsos(David Borsos) 更喜歡使用 JSON Web Tokens(JWT)缘琅,它足夠簡單且?guī)熘С殖潭纫脖容^好刷袍。
4. 客戶端 Token 與 API 網(wǎng)關結合
這個方案意味著所有請求都通過網(wǎng)關,從而有效地隱藏了微服務堆生。 在請求時淑仆,網(wǎng)關將原始用戶令牌轉(zhuǎn)換為內(nèi)部會話 ID 令牌蔗怠。在這種情況下寞射,注銷就不是問題怠惶,因為網(wǎng)關可以在注銷時撤銷用戶的令牌轧粟。