我們使用 Keycloak 服務器對多個 IDPS(谷歌、活動目錄等)進行身份驗證。我們有一個充當客戶端角色的 spring gateway 微服務和其他幾個充當資源服務器角色的微服務。
當用戶通過 keycloak 進行身份驗證時,我們希望將經過身份驗證的用戶與我們自定義資料庫(不是 Keycloak DB)中的一些自定義欄位(如背景關系、角色、用戶詳細資訊)相關聯,并將這些欄位也發送到其他微服務,這樣我們就不會需要在每個微服務中從資料庫加載欄位。
你會怎么做?在網關中創建一個 GlobalFilter,它將這些欄位添加到請求標頭并將這些標頭以某種方式設定到資源服務器中的主體物件?或者使用快取(redis)將欄位存盤在網關上并將它們加載到資源服務器中?或者你有其他解決方案嗎?例如擴展訪問令牌、覆寫 UserDetailsS??ervice 等。
需要注意的是,我們不想擴展 Keycloak 資料庫,因為我們希望在我們的自定義資料庫中進行整個角色管理。原因是 keycloak 模式不是很靈活。我們只想將 keycloak 用作虛擬身份驗證服務器。
uj5u.com熱心網友回復:
安全相關值的首選選項是讓 Keycloak 在頒發令牌時聯系您的 API 或自定義資料源,然后將您的域特定宣告包含在 JWT 訪問令牌中。在 keycloak 中,我相信這是通過協議映射器完成的,就像在這個答案中一樣。
宣告最佳實踐文章中討論了此設計模式。建議不要發送安全值,例如自定義標頭中的角色等,因為它們可能更容易被敵對方更改。相反,每個 API 都應該以零信任的方式接收 JWT 并對其進行驗證,然后使用收到的宣告進行授權。
對于非安全值,例如 asession_id或correlation_id用于日志記錄,簡單的 HTTP 標頭可以很好地作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478030.html
