簡體   English   中英

OAuth 2 access_token 與 OpenId Connect id_token

[英]OAuth 2 access_token vs OpenId Connect id_token

雖然我之前使用過 OAuth 2,但我是 Open ID Connect 的新手。

閱讀教程和文檔,我遇到了access_tokenid_token ,其中access_token 是根據 OAuth 2 生成的隨機唯一字符串id_token 是 JSON Web 令牌,其中包含用戶的 id、算法、發行者和各種其他信息,可以用於驗證它。 我還見過提供 access_token 和 id_token 的 API 提供商,據我所知,這是為了向后兼容。

我的問題是是否可以同時使用 access_token 和 id_token 來訪問受保護的資源 還是 id_token 僅用於驗證目的,而 access_token 用於獲取對受保護資源的訪問權限?

最初,OAuth 和 OpenId 是為不同的目的而設計的:OpenId 用於身份驗證,OAuth 用於授權。 OpenId Connect 是兩者的統一,為兩者服務,但不改變它們原有的功能。 記住這一點,你應該能夠找到自己。 ;-)

id_token 用於標識經過身份驗證的用戶,例如 SSO。 access_token 必須用於證明對受保護資源的訪問權限,例如 OpenId Connect 中的 userinfo 端點。

提供答案的另一個角度:

id_token

  • id_token 是 JWT - 請注意這一點!
  • 它包含有關用戶/資源所有者身份的聲明
  • 擁有有效的 id_token 意味着用戶已通過身份驗證

訪問令牌

  • access_token 是不記名令牌
  • 承載令牌意味着承載者無需進一步識別即可訪問資源
  • access_token 可以是 JWT(參見附錄點 1)或不透明

如果你想閱讀更多: oidc 和 oauth 中的令牌類型

access_token可用於調用 Auth0 中的某些 API(例如 /userinfo)或您在 Auth0 中定義的 API。

id_token是一個 JWT,代表登錄的用戶。 它經常被您的應用程序使用。

是否可以同時使用 access_token 和 id_token 來訪問受保護的資源?

不完全,首先需要使用id_token登錄,
第二,你會得到一個accessToken,
最后,使用 accessToken 訪問數據。

這里有一篇文章描述了為什么引入 id_token 以及它的最初目的是什么: Why we need a id_token in OpenID Connect & Facebook Connect 簡而言之,他們試圖標准化 Facebook 使用的混合流程

我們考慮使用 id_token 作為 access_token。 我們拒絕了該選項,因為:

  • 許多供應商已經為難以更改的端點提供了現有的 OAuth 令牌格式。
  • 我們不希望將長期訪問令牌作為 cookie 存儲在瀏覽器中。
  • 從長遠來看,兩個令牌的接收者顯然是分開的,這兩個令牌的語義過載會降低靈活性並增加復雜性。

暫無
暫無

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

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