在您所開發的用戶端應用程式中增加驗證和授權的復原能力

瞭解如何在用戶端應用程式中建立復原能力,這些用戶端應用程式會使用 Microsoft 身分識別平台 和 Microsoft Entra ID 來登入使用者,並代表這些使用者執行動作。

使用 Microsoft 驗證連結庫 (MSAL)

Microsoft 驗證連結庫 (MSAL) 是 Microsoft 身分識別平台 的一部分。 MSAL 會取得、管理、快取及重新整理令牌;它會使用復原的最佳做法。 MSAL 可協助開發人員建立安全的解決方案。

深入了解:

MSAL 會快取令牌,並使用無訊息令牌擷取模式。 MSAL 會在原生提供安全記憶體的操作系統上串行化令牌快取,例如 通用 Windows 平台 (UWP)、iOS 和 Android。 當您使用下列專案時,自訂串行化行為:

  • Microsoft.Identity.Web
  • MSAL.NET
  • 適用於 Java 的 MSAL
  • 適用於 Python 的 MSAL

深入了解:

當您使用 MSAL 時,支援令牌快取、重新整理和無訊息擷取。 使用簡單模式來取得令牌以進行驗證。 支援多種語言。 在上尋找程式代碼範例,Microsoft 身分識別平台 程式代碼範例

try
{
    result = await app.AcquireTokenSilent(scopes, account).ExecuteAsync();
}
catch(MsalUiRequiredException ex)
{
    result = await app.AcquireToken(scopes).WithClaims(ex.Claims).ExecuteAsync()
}

MSAL 能夠重新整理令牌。 當 Microsoft 身分識別平台 發出長期令牌時,它可以傳送資訊給用戶端以重新整理令牌(refresh_in)。 當舊令牌有效時,應用程式會執行,但需要較長的時間才能取得另一個令牌。

MSAL 版本

我們建議開發人員建置程式以使用最新的 MSAL 版本,因為驗證是應用程式安全性的一部分。 針對開發中的連結庫使用這個做法,並改善應用程式復原能力。

尋找最新版本和版本資訊:

令牌處理的復原模式

如果您未使用 MSAL,請使用復原模式來處理令牌。 MSAL 連結庫會實作最佳做法。

一般而言,使用新式驗證的應用程式會呼叫端點來擷取驗證使用者的令牌,或授權應用程式呼叫受保護的 API。 MSAL 會處理驗證並實作模式,以改善復原能力。 如果您未使用 MSAL,請使用本節中的指引來取得最佳做法。 否則,MSAL 會自動實作最佳做法。

快取令牌

請確定應用程式會從 Microsoft 身分識別平台 正確快取令牌。 應用程式收到令牌之後,具有令牌的 HTTP 回應具有 expires_in 屬性,指出快取的持續時間,以及何時重複使用它。 確認應用程式不會嘗試譯碼 API 存取令牌。

呼叫 Microsoft 身分識別平台 的應用程式圖表,透過執行應用程式的裝置上的令牌快取。

快取的令牌可防止應用程式與 Microsoft 身分識別平台 之間不必要的流量。 此案例可減少令牌擷取呼叫,讓應用程式更容易遭受令牌擷取失敗。 快取令牌可改善應用程式效能,因為應用程式會封鎖較不常取得令牌。 用戶會持續登入您的應用程式,以取得令牌存留期。

串行化和保存令牌

確保應用程式安全地串行化其令牌快取,以在應用程式實例之間保存令牌。 在其存留期內重複使用令牌。 重新整理令牌和存取令牌會發出數小時。 在此期間,使用者可能會多次啟動您的應用程式。 當應用程式啟動時,請確認它尋找有效的存取權或重新整理令牌。 這會增加應用程式復原能力和效能。

深入了解:

確定持續性令牌記憶體具有與用戶擁有者或進程身分識別相關的訪問控制和加密。 在各種作業系統上,有認證記憶體功能。

以無訊息方式取得令牌

驗證使用者或擷取呼叫 API 的授權需要 Microsoft 身分識別平台 中的多個步驟。 例如,使用者第一次登入時輸入認證並執行多重要素驗證。 每個步驟都會影響提供服務的資源。 具有最低相依性的最佳用戶體驗是無訊息令牌擷取。

可協助完成使用者驗證或授權之 Microsoft 身分識別平台 服務的圖表。

無訊息令牌擷取的開頭是來自應用程式令牌快取的有效令牌。 如果沒有有效的令牌,應用程式會嘗試使用可用的重新整理令牌和令牌端點來取得令牌。 如果兩個選項都無法使用,應用程式會使用 prompt=none 參數取得令牌。 此動作會使用授權端點,但使用者不會顯示UI。 可能的話,Microsoft 身分識別平台 會提供令牌給應用程式,而不需要用戶互動。 如果沒有方法產生令牌,則使用者會手動重新驗證。

注意

一般而言,請確定應用程式不會使用「登入」和「同意」等提示。 當不需要互動時,這些提示會強制用戶互動。

回應碼處理

使用下列各節來了解回應碼。

HTTP 429 回應碼

有會影響復原能力的錯誤回應。 如果您的應用程式收到 HTTP 429 回應碼「太多要求」,Microsoft 身分識別平台 會節流您的要求。 如果應用程式發出太多要求,則會進行節流處理,以防止應用程式接收令牌。 不允許應用程式在完成 [重試後回應] 字段時間之前嘗試取得令牌。 通常,429 回應表示應用程式未正確快取和重複使用令牌。 確認如何在應用程式中快取和重複使用令牌。

HTTP 5x 回應碼

如果應用程式收到 HTTP 5x 回應碼,應用程式不得輸入快速重試迴圈。 針對 429 回應使用相同的處理。 如果沒有出現 Retry-After 標頭,請在響應之後至少 5 秒,使用第一次重試來實作指數輪詢重試。

當要求逾時時,不建議立即重試。 實作指數輪詢重試,第一次重試至少在回應后 5 秒。

許多應用程式和 API 都需要使用者資訊才能授權。 可用的方法有優點和缺點。

語彙基元

身分識別 (ID) 令牌和存取令牌具有提供信息的標準宣告。 如果需要的信息位於令牌中,最有效率的技術是令牌宣告,因為這樣會防止另一個網路呼叫。 較少的網路呼叫等同於更好的復原能力。

深入了解:

注意

某些應用程式會呼叫 UserInfo 端點,以擷取已驗證使用者的宣告。 標識元令牌中的資訊是UserInfo端點中資訊的超集。 讓應用程式使用標識碼令牌,而不是呼叫UserInfo端點。

使用選擇性宣告來增強標準令牌宣告,例如群組。 [ 應用程式群組 ] 選項包含指派給應用程式的群組。 [所有][安全組] 選項包含相同租使用者中應用程式的群組,可將群組新增至令牌。 評估效果,因為它可以藉由造成令牌膨脹,並要求更多呼叫來取得群組,來否定令牌中要求群組的效率。

深入了解:

建議您使用並包含應用程式角色,客戶會使用入口網站或 API 來管理哪些應用程式角色。 將角色指派給使用者和群組,以控制存取權。 發出令牌時,指派的角色會位於令牌角色宣告中。 衍生自令牌的資訊可防止更多 API 呼叫。

請參閱將 應用程式角色新增至您的應用程式,並在令牌中接收它們

根據租使用者資訊新增宣告。 例如,延伸模組具有企業特定的使用者標識符。

將資訊從目錄新增至令牌是有效率的,可藉由減少相依性來增加復原能力。 因為無法取得令牌,所以無法解決復原問題。 為應用程式的主要案例新增選擇性宣告。 如果應用程式需要系統管理功能的資訊,應用程式可以視需要取得該資訊。

Microsoft Graph

Microsoft Graph 具有統一的 API 端點,可存取有關生產力模式、身分識別和安全性的 Microsoft 365 數據。 使用 Microsoft Graph 的應用程式可以使用 Microsoft 365 資訊進行授權。

應用程式需要一個令牌才能存取 Microsoft 365,這比先前需要多個令牌的 Microsoft 365 元件 API 更有彈性。

使用 Microsoft Graph API 時,請使用可簡化建置可存取 Microsoft Graph 之復原應用程式的 Microsoft Graph SDK。

請參閱 Microsoft Graph SDK 概觀

針對授權,請考慮使用令牌宣告,而不是某些 Microsoft Graph 呼叫。 要求令牌中的群組、應用程式角色和選擇性宣告。 Microsoft Graph 的授權需要更多依賴 Microsoft 身分識別平台 和 Microsoft Graph 的網路呼叫。 不過,如果您的應用程式依賴 Microsoft Graph 作為其數據層,則 Microsoft Graph 進行授權的風險並不大。

在行動裝置上使用訊息代理程序驗證

在行動裝置上,像是 Microsoft Authenticator 的驗證代理程式可改善復原能力。 驗證代理程式會使用主要重新整理令牌 (PRT) 搭配有關使用者和裝置的宣告。 使用 PRT 進行驗證權杖,以從裝置存取其他應用程式。 當 PRT 要求應用程式存取時,Microsoft Entra ID 會信任其裝置和 MFA 宣告。 這可藉由減少驗證裝置的步驟來增加復原能力。 在同一部裝置上有多個 MFA 提示時,使用者不會受到挑戰。

請參閱什麼是 主要重新整理令牌?

透過執行應用程式的裝置上的令牌快取和令牌存放區,以及驗證訊息代理程式呼叫 Microsoft 身分識別平台 的應用程式圖表。

MSAL 支援訊息代理程序驗證。 深入了解:

持續性存取評估

持續存取評估 (CAE) 會使用長期令牌來增加應用程式安全性和復原能力。 使用 CAE 時,會根據重大事件和原則評估來撤銷存取令牌,而不是簡短的令牌存留期。 對於某些資源 API,因為風險和原則會實時評估,因此 CAE 會增加令牌存留期,最多 28 小時。 MSAL 會重新整理長時間存在的令牌。

深入了解:

如果您開發資源 API,請移至 [openid.net共享訊號 – 安全 Webhook 架構]。

下一步