本文へスキップ
ecdsa.com
Microsoft.IdentityModel.Tokens (.NET).NET

エラーメッセージ

IDX10214: Audience validation failed.

別の表記

  • IDX10214: Audience validation failed. Audiences: 'api://billing'. Did not match: validationParameters.ValidAudience: 'api://orders' or validationParameters.ValidAudiences: 'null'.
  • Bearer error="invalid_token", error_description="The audience 'api://billing' is invalid"

8.x ではテキストが「IDX10214: Audience validation failed. See https://aka.ms/identitymodel/app-context-switches 」に短縮されています。6.x と 7.x(6.36.0 と 7.7.1 で確認)は、トークンのオーディエンスと設定された値を列挙します。ASP.NET Core は `error_description="The audience '…' is invalid"` を送信します。

Microsoft.IdentityModel.Tokens (.NET) — SecurityTokenInvalidAudienceException

このエラーの意味

トークンの `aud` が `ValidAudience` / `ValidAudiences`(`JwtBearerOptions` で `Audience` を設定している場合はその値)と一致しません。署名には問題がなく、トークンが別の受信者向けに発行されています。Microsoft Entra ID での典型的な不一致は、API のアプリケーション ID URI(`api://…`、v1 トークンで使用)とクライアント ID の GUID(v2 トークンで使用)の間で起こります。

発生する理由

修正方法

  1. 1.

    API の識別子を明示的に列挙する

    両方のバージョンのトークンを使っている場合は、自分の API のクライアント ID とアプリケーション ID URI を受け入れ、それ以外は受け入れないでください。

    csharp
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidIssuer = "https://login.microsoftonline.com/<tenant-id>/v2.0",
        // Entra ID v2 tokens carry the client ID; v1 tokens the App ID URI. Accept exactly your API's identifiers.
        ValidAudiences = ["00000000-0000-0000-0000-000000000000", "api://orders"],
    };
  2. 2.

    自分の API のスコープを要求する

    `api://orders/Orders.Read` 用のトークンでは、オーディエンスが自分の API になります。アプリの登録でスコープを公開し、クライアントにそのスコープを要求させてください。

    csharp
    // Client: request a scope of YOUR API, not Microsoft Graph, so aud is your API.
    var result = await app.AcquireTokenSilent(new[] { "api://orders/Orders.Read" }, account).ExecuteAsync();

関連するエラー

署名エラーデータベースをすべて見る