[英]OpenID Connect/Oauth2 - cache/use tokens
我有一個帶有 REST API 的系統。 REST API 的用戶應該能夠使用 OpenID Connect over Oauth2 進行身份驗證。 系統本身有自己的權限系統。 我需要將 IDP 用戶映射到我的本地權限系統。 我正在考慮將本地數據庫中的openid范圍子鍵保存為唯一的用戶標識符。
但是我應該在 API 中返回給用戶哪個令牌。 它應該是來自 OpenID Connect 層的 oauth2 訪問 id 或 token_id,還是兩者兼而有之?
所以我看到了這些 API 最終用戶的替代方案:
Authorization: Bearer <access_id>
Authorization: Bearer <token_id>
Authorization: Bearer <access_id>
TokenID: <token_id>
如果不將 token_id/access_id 保留在系統中,我需要根據 API 請求從客戶端獲取此信息。 令牌 ID 包含 JWT 聲明(子),因此我需要它來驗證客戶端可以在我的系統中執行的操作。
我是否需要將以下任何 ID 存儲在我的本地數據庫中以驗證 API 請求,還是應該由用戶提供?
我基本上是在認證和用戶識別之后。 我不是在訪問除此之外的任何外部資源。
還有最后一個問題。 我是否需要驗證對 IDP 的每個請求的訪問令牌,或者我可以緩存它嗎? 使用 OpenID Connect 時是否需要同時驗證訪問令牌和令牌 ID?
編輯:
我的系統本身有一個 REST API 和它自己的權限系統。 權限系統使用由使用 OpenID Connect 的任何身份驗證系統提供的用戶 ID。 第一個用戶被手動添加到權限系統中。
思想流:
我想使用外部 IDP 讓用戶登錄,而不是從 3rd 方系統訪問資源。
更新
訪問令牌確實有用戶 ID - 請參閱本文的第 14 步。 為什么你認為沒有?
此規則的一個例外是當沒有用戶參與時 - 用於應用程序到應用程序的通信(例如客戶端憑據流)。 但你沒有使用它。
原答案
您應該只將完整的訪問(承載)令牌從 UI 發送到 API - 並且您不需要將令牌詳細信息存儲在您的數據庫中。
遷移到 OAuth 架構時,您會將用戶數據存儲在 2 個位置:
正如您所建議的那樣,將唯一用戶 ID 存儲在產品數據中以進行關聯和跟蹤是很常見的。 登錄后,您的 API 通常需要根據產品數據進行授權。
我的幾篇博文更詳細地介紹了這些主題:
我的博客還鏈接到將這些概念聯系在一起的示例代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.