共用方式為


AD FS OpenID Connect/OAuth 概念

適用於 Active Directory 同盟服務 (AD FS) 2016 和更新版本

新式驗證執行者

演員 說明
終端使用者 存取資源的安全性主體(使用者、應用程式、服務和群組)。
客戶 您的 Web 應用程式,透過其客戶端識別碼來識別。 用戶端通常是使用者與其互動的一方,用戶端會向授權伺服器要求令牌。
授權伺服器/識別提供者 (IdP) 您的 AD FS 伺服器。 其負責驗證存在於組織目錄中的安全性主體身分識別。 在成功驗證這些安全性主體時,它會發出安全性令牌(持有人存取令牌、標識元令牌和重新整理令牌)。
資源伺服器/資源提供者/信賴方 資源或數據所在的位置。 它會信任授權伺服器以安全地驗證和授權用戶端,並使用持有人存取令牌來確保可以授與資源的存取權。

這張圖提供角色之間的最基本關聯性。

新式驗證執行者圖表。

應用程式類型

應用程式類型 說明 角色
原生應用程式 有時稱為 公用用戶端。 它是一個在電腦或裝置上執行並供用戶互動的客戶端應用程式。 要求授權伺服器 (AD FS) 的令牌,讓使用者存取資源。 使用令牌做為 HTTP 標頭,將 HTTP 要求傳送至受保護的資源。
伺服器應用程式 (Web 應用程式) 在伺服器上執行的 Web 應用程式,使用者可透過瀏覽器存取。 因為它能夠維護自己的用戶端密碼或認證,所以有時稱為 機密用戶端 要求授權伺服器 (AD FS) 的令牌,讓使用者存取資源。 在要求令牌之前,用戶端 (Web 應用程式) 必須使用其秘密進行驗證。
網路應用程式介面 (Web API) 使用者存取的最終資源。 把它想像成依賴方的新代表。 客戶端所取得的持有者憑證token的消耗。

應用程式群組

您必須將應用程式群組與使用AD FS 設定的每個原生或Web應用程式 OAuth 用戶端或 Web API 資源產生關聯。 設定應用程式群組中的用戶端以存取相同群組中的資源。 應用程式群組可以有多個客戶端和資源。

安全代幣

新式驗證會使用下列令牌類型:

  • id_token:由授權伺服器(AD FS)發行並由用戶端用來驗證的 JWT 令牌。 ID 標記中的宣告包含用戶的資訊,讓用戶端可以使用。
  • access_token:由授權伺服器(AD FS)簽發的 JWT 令牌,供資源使用。 此憑證的「aud」或「audience」宣告必須符合資源或網站 API 的識別碼。
  • refresh_token:由AD FS發出,供用戶端在需要重新整理id_token和access_token時使用。 令牌對用戶端不透明,而且只由AD FS取用。

重新整理令牌存留期

  • 簡單登入,沒有 KMSI、裝置 註冊:AD FS 會套用 SsoLifetimeDeviceUsageWindowInDays。 第一個重新整理令牌具有lifetime=DeviceUsageWindowInDaysSsoLifetime,取決於哪個欄位較低;但如果是,則不會再發行的進一步重新整理令牌。
  • KMSI 登入,EnableKmsi=true 在 AD FS 配置中並作為參數傳遞 kmsi=true:AD FS 會套用 KmsiLifetimeMins 並搭配 DeviceUsageWindowInDays。 第一個重新整理令牌是 lifetime=DeviceUsageWindowInDays,之後每個 grant_type=refresh_token 要求都會獲得一個新的重新整理令牌。 此程式只會與原生用戶端或機密用戶端加上裝置驗證一起執行。
  • 已註冊的裝置、裝置驗證:AD FS 使用與 KMSI 類似的 PersistentSsoLifetimeMinsDeviceUsageWindowInDays。 原生客戶端和機密客戶端都應該根據裝置驗證取得新的刷新令牌。

若要深入瞭解,請參閱 AD FS 單一登入檔案

範圍

當您在 AD FS 中註冊資源時,您可以設定範圍,讓 AD FS 執行特定動作。 除了設定範圍之外,您必須在AD FS要求中傳送範圍值來執行動作。 例如,系統管理員在資源註冊期間將範圍設定為 openid,而應用程式(客戶端)必須在AD FS的驗證要求中傳送 scope = openid,才能發出標識元令牌。 以下是AD FS 中可用範圍的詳細資料:

  • aza - 如果您使用 OAuth 2.0 協定擴展給代理用戶端,而且範圍參數包含 aza,伺服器會發行一個新的主要刷新令牌。 它會在回應的 [refresh_token] 字段中設定令牌,並在強制執行時,將 refresh_token_expires_in field 設定為新主要重新整理令牌的存留期。
  • openid - 讓應用程式要求使用 openid 連線驗證通訊協定。
  • logon_cert - 讓應用程式要求登入憑證,讓您可用來以互動方式登入已驗證的使用者。 AD FS 伺服器會省略回應中的 access_token 參數,而是提供base64編碼的CMS憑證鏈結或 CMC 完整 PKI 回應。 如需詳細資訊,請參閱 MS-OAPX:OAuth 2.0 通訊協定延伸模組
  • user_impersonation - 向 AD FS 要求代表存取令牌。 如需如何使用此範圍的詳細資訊,請參閱 使用 OAuth 搭配 AD FS 2016使用 On-Behalf-Of (OBO) 建置多層式應用程式。
  • allatclaims – 讓應用程式要求將存取令牌中的權益宣告也新增至 ID 標識符令牌。
  • vpn_cert - 讓應用程式要求 VPN 憑證,以使用 EAP-TLS 驗證建立 VPN 連線。 此功能已不再受到支援。
  • email - 允許應用程式請求登入使用者的電子郵件權利聲明。
  • profile - 讓應用程式要求登入使用者的資料檔案相關聲明。

索賠

AD FS 所簽發的安全性令牌(存取令牌和身份認證令牌)包含對已驗證主體信息的宣告或斷言。 應用程式可以使用聲明來執行各種工作,包括:

  • 驗證令牌
  • 識別主體的目錄租戶
  • 顯示使用者資訊
  • 確認對象的授權

任何指定安全性令牌中存在的宣告取決於令牌類型、用來驗證使用者的認證類型,以及應用程式組態。

高階 AD FS 驗證流程

高層級流程的圖表如下。

AD FS 驗證流程的圖表。

  1. AD FS 會從用戶端接收驗證要求。

  2. AD FS 會在驗證請求中驗證用戶端識別碼,並在 AD FS 的用戶端註冊過程中取得該識別碼。 如果使用機密用戶端,AD FS 也會驗證驗證驗證要求中提供的客戶端密碼。 AD FS 也會驗證用戶端的重新導向 URI。

  3. AD FS 會識別用戶端想要透過在驗證要求中傳遞之資源參數存取的資源。 如果您使用 MSAL 用戶端連結庫,則不會傳送資源參數。 相反地,資源 URL 會以範圍參數的一部分傳送:scope = [resource url]/[scope values,例如 openid]

    如果未使用資源或範圍參數來傳遞資源,AD FS 將使用預設資源 urn:microsoft:userinfo,而其多因素驗證(MFA)、發行或授權等原則將無法設定。

  4. 下一個 AD FS 會驗證用戶端是否具有存取資源的許可權。 AD FS 也會驗證傳入驗證要求的範圍是否符合註冊資源時所設定的範圍。 如果客戶端沒有許可權,或驗證要求中未傳送正確的範圍,驗證流程就會終止。

  5. 一旦許可權和範圍驗證之後,AD FS 會使用已設定的 驗證方法來驗證使用者。

  6. 如果根據資源原則或全域驗證原則需要 另一個驗證方法,則 AD FS 會觸發額外的驗證。

  7. AD FS 會使用 Microsoft Entra 多重要素驗證第三方多重要素驗證 來執行驗證。

  8. 一旦使用者通過驗證,AD FS 就會套用 宣告規則。 宣告規則會將傳送至資源的宣告判斷為安全性令牌的一部分。 AD FS 也會套用 訪問控制原則, 確認使用者符合存取資源的必要條件。

  9. 接下來,AD FS 會產生存取權並重新整理令牌。 AD FS也會產生標識碼令牌。

  10. AD FS 會收到驗證要求。

  11. 如果您在驗證要求中包含 scope = allatclaims,它會自定義 標識元令牌,以根據定義的宣告規則在存取令牌中包含宣告。

  12. 產生並自定義必要的令牌之後,AD FS 會回應用戶端並包含令牌。 只有在驗證要求包含 scope = openid時,才會將標識元令牌回應包含在回應中。 用戶端總是可以在使用令牌端點進行驗證後取得身份令牌。

圖書館類型

使用兩種類型的函式庫與 AD FS:

  • 客戶端連結庫:原生用戶端和伺服器應用程式會使用用戶端連結庫來取得存取令牌,以呼叫 Web API 之類的資源。 當您使用AD FS 2019時,Microsoft驗證連結庫 (MSAL) 是最新且建議的用戶端連結庫。

  • 伺服器中間件連結庫:Web 應用程式會使用伺服器中間件連結庫進行使用者登入。 Web API 使用伺服器中間件連結庫來驗證原生用戶端或其他伺服器所傳送的令牌。 Open Web Interface for .NET (OWIN) 是建議的中間件連結庫。

自訂識別碼令牌 (識別碼令牌中的額外宣告)

在某些情況下,Web 應用程式用戶端可能需要身份驗證令牌中的額外宣告,以協助實現功能。 使用下列其中一個選項,在 ID 令牌中設定額外的宣告:

選項 1: 當您有公用用戶端且 Web 應用程式沒有嘗試存取的資源時,請使用此選項。 此選項需要:

  • response_mode 設定為 form_post
  • 信賴憑證者標識碼 (Web API 識別符) 與用戶端標識元相同

AD FS 自定義令牌選項一的圖表。

選項 2: 當 Web 應用程式正在嘗試存取資源,且需要透過識別碼令牌傳遞額外的宣告時,請使用此選項。 您可以使用公用和機密用戶端。 此選項需要:

  • response_mode 設定為 form_post

  • AD FS 伺服器上已安裝KB4019472

  • 範圍 allatclaims 會指派給用戶端 – RP 配對。 您可以使用 Grant-ADFSApplicationPermission來指派範圍。 如果已授與一次,請使用 Set-AdfsApplicationPermission。 以下範例如顯示 PowerShell cmdlet:

    Grant-AdfsApplicationPermission -ClientRoleIdentifier "https://my/privateclient" -ServerRoleIdentifier "https://rp/fedpassive" -ScopeNames "allatclaims","openid"
    

AD FS 自定義令牌選項二的圖表。

若要進一步瞭解如何在AD FS 中設定 Web 應用程式以取得自訂標識元令牌,請參閱在 AD FS 2016 或更新版本中 自定義識別元令牌。

單一登出作業

單一登出會結束所有使用會話 ID 的用戶端會話。 AD FS 2016 和更新版本支援OpenID Connect/OAuth的單一登出。 如需詳細資訊,請參閱 OpenID Connect 使用 AD FS 的單一登出

AD FS 端點

AD FS 端點 說明
/授權 AD FS 會傳回可用來取得存取令牌的授權碼。
/代幣 AD FS 會傳回可用來存取資源的存取令牌,就像在 Web API 中一樣。
/userinfo AD FS 會傳回主體宣告。
/devicecode AD FS 會傳回裝置程式代碼和用戶程式代碼。
/登出 AD FS 會註銷使用者。
/keys 用來簽署回應的 AD FS 公鑰。
/.well-known/openid-configuration AD FS 會傳回 OAuth/OpenID Connect 元數據。