簡體   English   中英

OpenID Connect/Oauth2 - 緩存/使用令牌

[英]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。 第一個用戶被手動添加到權限系統中。

思想流:

  1. 我的系統用戶請求https://mysystem/login
  2. 用戶被重定向到https://idp/auth
  3. IDP 將成功登錄重定向到https://mysystem/callback我的系統從令牌 ID JWT 獲取用戶 ID ( sub ) 和電子郵件。
  4. 並使用訪問令牌(不是 OIDC 令牌 ID)返回給用戶。
  5. 用戶現在可以執行: curl -H "Authorization: bearer access token" https://mysytem/some/resource
  6. Mysytem 從用戶那里得到這個請求,但不知道如何將訪問令牌映射到數據庫中的用戶 ID,而無需向 IDP 詢問用戶 ID。

我想使用外部 IDP 讓用戶登錄,而不是從 3rd 方系統訪問資源。

更新

訪問令牌確實有用戶 ID - 請參閱本文的第 14 步 為什么你認為沒有?

此規則的一個例外是當沒有用戶參與時 - 用於應用程序到應用程序的通信(例如客戶端憑據流)。 但你沒有使用它。

原答案

您應該只將完整的訪問(承載)令牌從 UI 發送到 API - 並且您不需要將令牌詳細信息存儲在您的數據庫中。

遷移到 OAuth 架構時,您會將用戶數據存儲在 2 個位置:

  • 您的常規產品數據庫 - 通常包括角色和用戶權限
  • 授權服務器 - 生成唯一的用戶 ID

正如您所建議的那樣,將唯一用戶 ID 存儲在產品數據中以進行關聯和跟蹤是很常見的。 登錄后,您的 API 通常需要根據產品數據進行授權。

我的幾篇博文更詳細地介紹了這些主題:

我的博客還鏈接到將這些概念聯系在一起的示例代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM