簡體   English   中英

在 userinfo 端點使用 ID 令牌或訪問令牌?

[英]Use an ID token or access token at userinfo endpoint?

我有一個客戶端 API,這是一個機密客戶端。 當我使用開放 id 提供程序進行身份驗證時,我將使用授權代碼重定向到我的回調,該代碼會立即交換以接收刷新令牌、訪問令牌和 ID 令牌。

現在,我為經過身份驗證的用戶創建了一個具有 uuid 的會話 cookie。 當用戶提出請求時,我是否...

  1. 使用我的訪問令牌調用提供者 userinfo 端點以獲取用戶信息。
  2. 讀取經過驗證的 ID 令牌以獲取用戶信息。

在使用刷新令牌時,我看到 2 個選項:

  1. 在請求期間讀取有效的 ID 令牌或訪問令牌后,使用刷新令牌獲取新的訪問或 ID 令牌以存儲在新的 uuid 中,該 uuid 將通過更新的 cookie 返回給用戶。 雖然要求用戶登錄更多,這意味着用戶會話在他們不活動后變得無效,這等於訪問或 ID 令牌的生命周期。 這可能更安全。
  2. 使用 ID 令牌或訪問令牌直到有效,然后刷新以獲取新令牌。 如果刷新永不過期,即使長時間不活動,用戶也永遠不必再次登錄(除非 cookie 過期時間很低) 可能不太安全。

想法?

先說幾點:

  • 應用程序會話的生命周期(通常)與 ID 令牌的生命周期無關; 后者只是對用戶身份的斷言,並不代表會話
  • 您的第一個選項不適用於並行請求,例如,當用戶為您的應用程序打開多個選項卡或應用程序使用 Javascript 調用時

但最重要的是:刷新令牌不應該用於獲取新的 ID 令牌,它應該只刷新訪問令牌; 用戶需要在場才能獲得與原始 ID 具有相同語義的新 ID 令牌。

簡而言之,您只使用身份驗證令牌來訪問 userinfo_endpoint uri。

OpenID Connect 允許使用“發現文檔”,這是在眾所周知的位置找到的 JSON 文檔,其中包含提供有關 OpenID Connect 提供程序配置的詳細信息的鍵值對,包括授權的 URI、令牌、撤銷、用戶信息、和公鑰端點。

您可以從他們的文檔中研究每個應用程序的唯一發現頁面 uri,例如這里是Google

您向發現文檔 uri 發出 get 請求,並從該文檔中找到 userinfo_endpoint uri。

來自微軟的示例響應

GET https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration
{
  "authorization_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize",
  "token_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token",
  "token_endpoint_auth_methods_supported": [
    "client_secret_post",
    "private_key_jwt"
  ],
  "jwks_uri": "https://login.microsoftonline.com/{tenant}/discovery/v2.0/keys",
  "userinfo_endpoint": "https://graph.microsoft.com/oidc/userinfo",
  "subject_types_supported": [
      "pairwise"
  ],
  ...

}

Google 的發現文檔 uri

GET https://accounts.google.com/.well-known/openid-configuration

獲取授權令牌。 例如,拉起 Network -> Fetch/XHR 現在環顧四周並嘗試找到帶有密鑰“授權”的請求標頭。 復制 'Bearer {the id}' 並放入一個 get 請求的頭部,如下圖所示。

GET or POST /oidc/userinfo HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6Il…

Microsoft 示例郵遞員請求在此處輸入圖片說明

暫無
暫無

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

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