如何在應用程式中使用已啟用持續存取評估的 API

持續存取評估 (CAE) 是 Microsoft Entra 功能,允許根據 重大事件原則評估 來撤銷存取令牌,而不是根據存留期依賴令牌到期。 對於某些資源 API,因為風險和原則會實時評估,這會增加令牌存留期最多 28 小時。 Microsoft 驗證連結庫 (MSAL) 會主動重新整理這些長期令牌,以增加應用程式的復原能力。

本文說明如何在應用程式中使用已啟用 CAE 的 API。 未使用 MSAL 的應用程式可新增對宣告挑戰、宣告要求和用戶端功能的支援,以使用 CAE。

實作考量

若要使用 CAE,您的應用程式和資源 API 都必須啟用 CAE 存取。 不過,準備程式代碼以使用已啟用 CAE 的資源,不會阻止您使用未啟用 CAE 的 API。

如果資源 API 實作 CAE,而您的應用程式宣告它可以處理 CAE,則您的應用程式會收到該資源的 CAE 令牌。 基於這個理由,如果您宣告應用程式 CAE 就緒,您的應用程式必須處理所有接受 Microsoft 身分識別存取令牌的資源 API 的 CAE 宣告挑戰。 如果您未處理這些 API 呼叫中的 CAE 回應,您的應用程式最終可能會以仍在令牌傳回生命週期中的令牌重試 API 呼叫,但由於 CAE 而遭到撤銷。

程序代碼

第一個步驟是新增程序代碼,以處理因 CAE 而拒絕呼叫的資源 API 回應。 使用 CAE 時,API 會在撤銷存取令牌或 API 偵測到使用的 IP 位址變更時,傳回 401 狀態和 WWW-Authenticate 標頭。 WWW-Authenticate 標頭包含宣告挑戰,應用程式可用來取得新的存取令牌。

例如:

// Line breaks for legibility only

HTTP 401; Unauthorized

Bearer authorization_uri="https://login.windows.net/common/oauth2/authorize",
  error="insufficient_claims",
  claims="eyJhY2Nlc3NfdG9rZW4iOnsibmJmIjp7ImVzc2VudGlhbCI6dHJ1ZSwgInZhbHVlIjoiMTYwNDEwNjY1MSJ9fX0="

您的應用程式會檢查下列專案:

  • 傳回 401 狀態的 API 呼叫
  • WWW-Authenticate 標頭是否存在,其中包含:
    • 值為 「insufficient_claims」 的 「error」 參數
    • “claims” 參數

符合這些條件時,應用程式可以使用 MSAL.NET WwwAuthenticateParameters 類別來擷取和譯碼宣告挑戰。

if (APIresponse.IsSuccessStatusCode)
{
    // ...
}
else
{
    if (APIresponse.StatusCode == System.Net.HttpStatusCode.Unauthorized
        && APIresponse.Headers.WwwAuthenticate.Any())
    {
        string claimChallenge = WwwAuthenticateParameters.GetClaimChallengeFromResponseHeaders(APIresponse.Headers);

接著,您的應用程式會使用宣告挑戰來取得資源的新存取令牌。

try
{
    authResult = await _clientApp.AcquireTokenSilent(scopes, firstAccount)
        .WithClaims(claimChallenge)
        .ExecuteAsync()
        .ConfigureAwait(false);
}
catch (MsalUiRequiredException)
{
    try
    {
        authResult = await _clientApp.AcquireTokenInteractive(scopes)
            .WithClaims(claimChallenge)
            .WithAccount(firstAccount)
            .ExecuteAsync()
            .ConfigureAwait(false);
    }
    // ...

一旦您的應用程式準備好處理已啟用 CAE 的資源所傳回的宣告挑戰,您可以告訴 Microsoft 身分識別您的應用程式已準備好 CAE。 若要在 MSAL 應用程式中這樣做,請使用 「cp1」 的用戶端功能來建置您的公用用戶端。

_clientApp = PublicClientApplicationBuilder.Create(App.ClientId)
    .WithDefaultRedirectUri()
    .WithAuthority(authority)
    .WithClientCapabilities(new [] {"cp1"})
    .Build();

您可以藉由登入應用程式來測試應用程式,然後使用 Azure 入口網站 撤銷使用者的工作階段。 下次應用程式呼叫已啟用 CAE 的 API 時,系統會要求使用者重新驗證。

您可以藉由登入使用者,然後使用 Azure 入口網站 來撤銷使用者的會話,來測試您的應用程式。 下次應用程式呼叫已啟用 CAE 的 API 時,系統會要求使用者重新驗證。

程式碼範例

下一步