Asp.net

OpenIDConnect 響應類型混淆

  • May 12, 2021

在過去的幾天裡,我已經閱讀了有關 OAuth2 和 OpenIDConnect 的所有規範,並使用 Thinktecture Identity Server 實現了一個測試客戶端。我還參加了幾門複數課程,我認為了解它的主要要點。但是我仍然對響應類型感到非常困惑。

OpenIDConnect 規範指定混合流響應類型是“code”、“id_token”和“token”的組合。我了解“id_token”允許我們最初訪問基本的身份資訊。

我也理解程式碼”是指授權程式碼,“令牌”是指訪問令牌,並且將“程式碼”與其他兩個之一或兩者結合會觸發流程,但我的理解是您將授權程式碼交換為訪問令牌授權流程,而隱式流程隱式提供訪問程式碼?

有人可以解決我的困惑嗎?

您所做的以下陳述是正確的:

  • code指授權碼
  • token指訪問令牌或 ( access_token)
  • 在授權碼流程中,一切換codeaccess_token

但是您的部分困惑可能源於術語混淆:

  • 授權流程一詞並不完全正確;它的正式名稱是授權碼流
  • 訪問程式碼一詞不存在
  • 隱式流程沒有授權程式碼(也沒有訪問程式碼),實際上根本不涉及允許客戶端從令牌端點獲取令牌的憑證(或授權),因此它的名字

正如@juanifioren 指出的那樣,混合流結合了以下內容:

  • code id_token流程將直接在身份驗證響應中獲得一個和codeid_token但您將使用從令牌端點code獲取一個access_token
  • code token流程將直接在身份驗證響應中獲得一個和codeaccess_token但您將使用從令牌端點在後端code獲得一個id_token和可能的另一個access_token
  • code id_token token流程將直接在 Authentication Response 中獲得aan code,您可以在後端使用Token 端點獲取另一個access_token``id_token``code access_token

從 Token 端點獲取access_token與從 Authorization 端點獲取不同,因為機密客戶端向 Token 端點(而不是向 Authorization 端點)進行身份驗證。因此,access_token對於客戶端的機密部分可能有更多的權限和/或更長的壽命。

另請參閱有關此主題的規範郵件列表上的簡短主題:http: //lists.openid.net/pipermail/openid-specs-ab/Week-of-Mon-20150209/005229.html

引用自:https://stackoverflow.com/questions/29275477