共用方式為


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

持續存取評估 (CAE) 是一項Microsoft Entra 功能,允許根據 重大事件原則評估來撤銷存取令牌,而不是依賴以存留期為基礎的令牌到期。

因為風險和原則會即時評估,因此某些資源 API 令牌存留期最多可以增加 28 小時。 這些長期令牌會由 Microsoft 驗證連結庫 (MSAL) 主動重新整理,以增加應用程式的復原能力。

未使用 MSAL 的應用程式可新增對宣告挑戰、宣告要求和用戶端功能的支援,以使用 CAE。

實作考量

若要使用 CAE,您的應用程式和其所存取的資源 API 都必須啟用 CAE。 如果資源 API 會實作 CAE,而您的應用程式宣告它可以處理 CAE,則您的應用程式會接收該資源的 CAE 權杖。 基於這個理由,如果您宣告應用程式 CAE 就緒,您的應用程式必須針對接受Microsoft身分識別存取令牌的所有資源 API 處理 CAE 宣告挑戰。

不過,準備程式代碼以支援已啟用 CAE 的資源並不會限制其使用不支援 CAE 的 API 的能力。 如果您的應用程式未正確處理 CAE 回應,可能會使用技術上有效的令牌重複重試 API 呼叫,但因 CAE 而遭到撤銷。

在應用程式中處理 CAE

首先,新增程式代碼來處理因 CAE 而拒絕呼叫的資源 API 回應。 使用CAE時,API會在撤銷存取令牌時傳回401狀態和 WWW-Authenticate 標頭,或API偵測到所使用的IP位址變更。 標頭 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 ,其中包含:
    • error具有 值的參數insufficient_claims
    • 參數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 時,系統會要求使用者重新驗證。

程式碼範例