背景資訊:Web 應用程式和服務器將使用 REST API 我們正在考慮讓 Web 應用程式的代碼流和服務器部分的客戶端憑據流(機器對機器身份驗證)。作為工具,我們將使用 keycloak
但是現在的問題是,我們不確定是否可以在一個 REST API 上擁有兩個 oauth 流。
一個 REST API 是否可以有兩個 oauth 流?如果可能的話,你怎么能做到呢?
uj5u.com熱心網友回復:
這可以。在這兩種情況下,客戶端都將使用 Keycloak 執行 OAuth 流程,而且它們可能完全不同。您的 API 不需要知道客戶端是如何進行身份驗證的,并且在這兩種情況下都會收到 JWT 訪問令牌。
兩個不同的客戶端并不總是呼叫相同的 API 端點。它們很可能使用不同的范圍和宣告,您的 API 授權設計需要處理這個問題。服務器客戶端不會通過主題宣告提供用戶身份,而 Web 應用程式會。
應對這些差異的方法通常是ClaimsPrincipal在 JWT 處理期間設計一個,然后根據 API 的業務邏輯中接收到的資料應用授權規則。
在某些情況下,為服務器客戶端設計的操作不應從 Web 應用程式呼叫,反之亦然。范圍和宣告將使您能夠實作這一目標。
示例 API
也許看看我的這個代碼示例和博客文章。關鍵是 API 執行這些步驟。如果您執行相同的步驟,您將處于良好狀態:
- 驗證 JWT 訪問令牌
- 構建宣告主體
- 為每個操作實施范圍
- 使用宣告主體應用業務授權規則
我的 API 做了一些稍微高級的東西,比如查找額外的宣告,你可以忽略它們。請注意,API 不知道也不關心使用了哪些流客戶端 - 可能有 5 個不同的流。API 的作業只是處理范圍和宣告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/467200.html
