身份伺服器4。 基本概念。 OpenID Connect、OAuth 2.0 和 JWT

透過這篇文章,我想開闢一個專門討論 IdentityServer4 的文章線索。讓我們從基本概念開始。

目前最有前景的身份驗證協定是 OpenID Connect,授權協議(提供存取)是 身份驗證 2.0. 身份伺服器4 實現這兩個協議。優化後可以解決 典型問題 安全。

OpenID Connect 是一種身份驗證協定和標準,它不提供對資源的存取(Web API),但由於它是在授權協議之上設計的 身份驗證 2.0,它允許您獲取用戶配置文件參數,就像您有權訪問資源一樣 使用者資訊.

智威湯遜 (JSON Web Token) 是一種 Web 標準,定義了一種以加密形式傳輸 JSON 格式的使用者資料的方法。

OAuth 2.0 (RFC 6749) 是一個授權協議和標準。它允許應用程式存取受保護的資源,例如 Web API。

讓我們看一下訪問受保護資源的圖表並了解主要步驟和可接受的術語:

身份伺服器4。 基本概念。 OpenID Connect、OAuth 2.0 和 JWT

  1. 客戶端請求使用者允許代表其進行身份驗證。 顧客 是代表資源擁有者存取受保護資源的用戶端應用程式。 資源 - 這些都是我們受保護的服務 Web API.

  2. 使用者允許客戶端應用程式代表他進行身份驗證,例如透過輸入登入名稱和密碼。登入名稱和密碼將作為客戶端應用程式的授權。 使用者(資源所有者) — 可以授予對受保護資源的存取權限的程式或個人,例如透過輸入登入名稱(使用者名稱)和密碼(密碼);

  3. 客戶端應用程式請求存取令牌 IdentityServer4 透過提供有關您自己的資訊(client_id, client_secret),授予使用者授權權限(username, password)並提供 grant_type и scope。然後,授權伺服器驗證用戶端的真實性和資源擁有者的詳細資訊(登入名稱和密碼)。

    OAuth 2.0 協定不僅對使用者進行身份驗證,還對存取資源的用戶端應用程式進行身份驗證。為此,協議提供瞭如下參數 CLIENT_ID и 客戶秘密.
    客戶ID 是使用的客戶端應用程式標識符 IdentityServer4 搜尋有關客戶的資訊。
    客戶秘密 類似於客戶端應用程式的密碼,用於對客戶端應用程式進行身份驗證 IdentityServer4. 客戶端密碼應該只有應用程式和 API 知道。基於上述,我們得出結論: IdentityServer4 需要了解其客戶端.

  4. 如果應用程式通過認證且授權權限有效, IdentiryServer4 創造 access-токен 應用程式的(存取權杖)和可選的刷新金鑰(refresh-токен)。授權過程完成。如果請求無效或未經授權,授權伺服器將傳回帶有對應錯誤訊息的代碼。

  5. 用戶端應用程式存取資料的安全性 Web API,並提供用於授權的存取權杖。如果資源伺服器回應代碼 401, 403498,則用於身份驗證的存取權杖無效或已過期。

  6. 如果令牌有效, Web API 向應用程式提供數據。

代幣類型

註冊於 IdentityServer4 客戶可以請求 IdentityServer4 identity-令牌, access- 令牌和 refresh-令牌。

  • 身份令牌 — 認證過程的結果。包含使用者 ID 以及有關如何以及何時對使用者進行身份驗證的資訊。您可以使用自己的資料對其進行擴充。
  • 訪問令牌 — 傳輸到受保護的 API,並由其用來授權(允許存取)其資料。
  • 刷新令牌(刷新令牌) 是授權伺服器可以傳回以回應存取權杖請求的可選參數。

我們再介紹兩個概念:

身份驗證伺服器 URL — 用於取得存取金鑰的端點。我們會將所有提供和更新存取金鑰的請求導向到此 URL。

資源網址 — 必須聯絡受保護資源的 URL 才能存取該資源,並向其傳遞授權標頭中的存取金鑰。

存取金鑰請求

要請求存取金鑰,客戶端需要執行以下操作: POST 請求端點 IdentityServer4 具有以下標題

'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
'Expect': '100-continue'

並傳遞以下參數:

'grant_type' : 'password',
'username' : login,
'password' : password,
'scope' : 'scope',
'client_id' : 'client_id',
'client_secret' : '{client_secret}'

username, password, client_id и client_secret 上面已經討論過了。我們來看看剩下的參數:

授予類型 — 授予類型或授權類型。授權權限的類型取決於應用程式使用的授權請求方式,以及API支援哪些權限類型。在我們的例子中這很重要 password,這是根據規範 OAuth 2.0 對應資源擁有者的存取詳細資訊的授予(透過登入名稱和密碼進行授權)。

協議 OAuth 2.0 定義了以下類型的補助金要求 與使用者的強制交互:

  • 授權碼。它是最常見的授權許可類型之一,因為非常適合伺服器端應用程序,外部人員無法存取應用程式原始碼和客戶端密鑰;
  • 隱含的。隱式授權權限類型用於無法保證客戶端機密機密性的行動和 Web 應用程式;

以及補助金的類型 無需用戶互動即可執行:

  • 資源所有者詳細信息。只有當客戶端應用程式受到使用者信任並且使用者願意輸入其登入名稱和密碼時,才應使用此類權限。僅當沒有其他選項可用時才應使用此權限類型。對於已在其係統中使用使用者憑證並希望切換到的企業客戶來說,這種類型的權限很方便 OAuth 2.0.
  • 客戶憑證。當應用程式存取 API 時使用。例如,當應用程式想要更新自己的服務註冊資訊或重新導向 URI,或透過服務 API 存取儲存在應用程式的服務帳戶中的其他資訊時,這可能很有用。

示波器 - 這是一個可選參數。它定義了範圍。伺服器傳回的存取權令牌將僅提供對該範圍內的那些服務的存取。那些。我們可以將多個服務組合在一個範圍內,如果客戶端收到該範圍的存取金鑰,他就可以存取所有這些服務。範圍也可用於限制授權權限(例如讀取或寫入存取權限)

來源: www.habr.com

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster