エラーメッセージ
IDX10205: Issuer validation failed. Issuer: 'https://sts.windows.net/
別の表記
- IDX10205: Issuer validation failed.
- Bearer error="invalid_token", error_description="The issuer 'https://sts.windows.net/00000000-0000-0000-0000-000000000000/' is invalid"
テキストは「Did not match: validationParameters.ValidIssuer: '…' or validationParameters.ValidIssuers: '…' or validationParameters.ConfigurationManager.CurrentConfiguration.Issuer: '…'」と続きます。ASP.NET Core は `error_description="The issuer '…' is invalid"` を送信します。
Microsoft.IdentityModel.Tokens (.NET) — SecurityTokenInvalidIssuerException
このエラーの意味
トークンの `iss` が、`ValidIssuer`、`ValidIssuers` の各値、ダウンロードした OpenID 構成の発行者のいずれとも一致しません。メッセージには、トークンの発行者と、比較したすべての値が出力されます。Microsoft Entra ID での典型例は、v1.0 トークン(`https://sts.windows.net/<tenant>/`)を v2.0 の発行者(`https://login.microsoftonline.com/<tenant>/v2.0`)と照合している場合、またはその逆です。
発生する理由
Entra ID の v1.0 トークンと v2.0 の発行者(またはその逆)
よくあるトークンのバージョンを決めるのは、クライアントが使ったエンドポイントではなく、API のアプリの登録(`requestedAccessTokenVersion`)です。v2.0 を想定している API でも、マニフェストで別の指定をするまでは v1.0 トークンを受け取ります。
別のテナントのトークン
よくあるマルチテナントのアプリは、発行者にユーザーのテナント ID を含むトークンを受け取ります。単一の `ValidIssuer` では 1 つのテナントしか受け付けられません。マルチテナントの API には、テナントを許可リストと照合する発行者バリデーターが必要です。
表記の違い
ときどき文字列は完全一致で比較されるため、末尾のスラッシュ、大文字のホスト名、`/v2.0` サフィックス、B2C のポリシーパスが不一致の原因になります。値はディスカバリドキュメントからコピーしてください。
修正方法
- 1.
トークンのバージョンを発行側で修正する
API のマニフェストで `requestedAccessTokenVersion` を 2 に設定すると、Entra ID は発行者が `login.microsoftonline.com/…/v2.0` の v2.0 トークンを発行するようになります。
json // App registration manifest of the API: issue v2.0 access tokens { "api": { "requestedAccessTokenVersion": 2 } } - 2.
移行期間中は両方の発行者を受け入れる
自分のテナントの発行者を両方の形式で列挙してください。エラーを消すために任意の発行者を受け入れてはいけません。
csharp options.TokenValidationParameters = new TokenValidationParameters { ValidIssuers = [ $"https://login.microsoftonline.com/{tenantId}/v2.0", $"https://sts.windows.net/{tenantId}/", // only while v1.0 tokens are still in circulation ], };