2026年5月5日のAzure SDK for .NET更新では、TokenCredentialOptionsに実験的なAdditionalQueryParametersが追加され、Azure Identityの認証処理からMSALへ追加クエリパラメータを渡せるようになりました。結論から言うと、通常のDefaultAzureCredentialやマネージドIDを使っているだけなら、すぐにコード変更する必要はありません。一方で、Microsoft Entraの特殊な認証フロー、Azure PowerShell連携、Agentic Sessions、InteractiveBrowserCredentialなどのMSALベース認証で独自パラメータが必要な開発チームは、Azure.Coreのバージョン、キャッシュキー設定、実験的APIの扱いを確認すべきです。今回の変更はPR #58939として2026年5月5日にマージされ、関連Issue #58921を解決するものです。(GitHub)
Azure SDKのMSAL追加クエリパラメータ対応で何が変わったのか
今回の変更の中心は、Azure SDK for .NETの認証オプションであるTokenCredentialOptionsに、追加クエリパラメータを指定するためのAdditionalQueryParametersが加わったことです。Azure.Core 1.55.0のCHANGELOGにも、TokenCredentialOptionsへ実験的なAdditionalQueryParametersプロパティを追加し、認証時にMSALへ追加クエリ文字列パラメータを転送できるようにした、と記載されています。(GitHub)
この機能は、Microsoft Entra IDへの認証リクエストに、通常のAzure SDK認証では付与されないクエリパラメータを追加したい場合に使います。元のIssueでは、任意のクエリ文字列パラメータをMSAL .NETのWithExtraQueryParametersへ転送するための実験的プロパティとして提案され、Azure PowerShellなどの利用者がMicrosoft Entra Agentic Sessionsをサポートする用途が例示されています。(GitHub)
ただし、これは認証処理を便利にする汎用カスタマイズ機能というより、特定の認証フローで明示的に必要になった場合に使う拡張ポイントです。PR本文でも「first iteration」であり、Experimental機能として導入され、今後の実装で設計が変わる可能性があると説明されています。(GitHub)
変更点の要点
| 項目 | 内容 | 実務での確認ポイント |
|---|---|---|
| 追加されたAPI | TokenCredentialOptions.AdditionalQueryParameters | Azure.Core 1.55.0以降を参照しているか確認する |
| 対象 | MSALに裏付けられたAzure Identity資格情報 | すべてのcredentialで効く前提にしない |
| 目的 | Microsoft Entra認証リクエストに追加クエリパラメータを付与 | 認証要件で必要な場合だけ使う |
| キャッシュ制御 | 各パラメータをトークンキャッシュキーに含めるか指定可能 | トークン内容や有効性に影響するパラメータは慎重に判断する |
| 安定性 | Experimental | ラッパー化し、将来のAPI変更に備える |
| リリース | Azure.Core 1.55.0 | NuGetやCentral Package Managementの固定バージョンを確認する |
PRの概要では、AdditionalQueryParametersはMSAL-backed credential pipelineに接続され、MSALのbuilderへWithExtraQueryParameters経由で渡されると説明されています。また、オプションのdeep copy、snapshot、null/empty値の扱いに関するテストも追加されています。(GitHub)
対応が必要な人、確認だけでよい人
この更新はAzure SDK利用者全員に影響するものではありません。まず、現在の認証方式と、追加クエリパラメータが本当に必要かを切り分けてください。
| 利用状況 | 対応方針 |
|---|---|
通常のDefaultAzureCredentialでKey Vault、Storage、App Configurationなどへ接続している | 基本的にコード変更は不要。依存パッケージ更新時のビルド確認で十分 |
| Microsoft Entra認証リクエストに独自クエリパラメータを付ける要件がある | AdditionalQueryParametersの導入を検討する |
| Azure PowerShellや独自ライブラリでAzure Identity credentialをラップしている | オプションのclone、snapshot、キャッシュ挙動をテストする |
InteractiveBrowserCredentialなど、対話型・ブローカー連携の認証を使っている | 必要なパラメータが認証リクエストに付与されるか確認する |
| マネージドID中心で、追加認証パラメータの要件がない | 対応不要。ただしAzure.Coreの更新影響は通常どおり確認する |
| Java、Python、JavaScriptなど.NET以外のAzure SDKを使っている | このPRはAzure SDK for .NETの変更として扱う。別言語へ同じ仕様があると決めつけない |
重要なのは、「Azure SDKに新機能が入ったから使う」ではなく、「認証プロバイダーや上位機能の要件として追加クエリパラメータが必要だから使う」という順序で判断することです。
AdditionalQueryParametersは何を指定するプロパティか
AdditionalQueryParametersは、パラメータ名をキーにし、値とキャッシュキーへ含めるかどうかのフラグを持つ辞書として扱われます。MSAL側のWithExtraQueryParametersにも、IDictionary<string, (string Value, bool IncludeInCacheKey)>を受け取るオーバーロードがあり、追加パラメータをHTTP認証リクエストのクエリ文字列へ付与し、各パラメータをトークンキャッシュキー計算に含めるか制御できます。(Microsoft Learn)
実装イメージは次のようになります。実際のパラメータ名と値は、Microsoft Entraや利用するサービス、ライブラリ側のドキュメントで指定されたものを使ってください。
using Azure.Identity;
#pragma warning disable AZID0001 // AdditionalQueryParameters is experimental
var options = new InteractiveBrowserCredentialOptions
{
TenantId = "<tenant-id>",
ClientId = "<client-id>"
};
options.AdditionalQueryParameters["<required-param-name>"] =
(Value: "<required-param-value>", IncludeInCacheKey: true);
#pragma warning restore AZID0001
var credential = new InteractiveBrowserCredential(options);
DefaultAzureCredentialOptionsにも継承関係上は指定できますが、追加クエリパラメータが必要な認証フローが明確なら、まずはInteractiveBrowserCredentialなど対象のcredentialに絞って設定するのが安全です。DefaultAzureCredentialのチェーンに広く設定すると、どのcredentialで有効になり、どのcredentialで無視されるのかが分かりにくくなります。
IncludeInCacheKeyの判断基準
今回の変更で特に注意すべきなのが、IncludeInCacheKeyです。MSALのドキュメントでは、パラメータがトークンの内容や有効性に影響する場合、正しいトークンをキャッシュから返すためにIncludeInCacheKeyをtrueにすべきと説明されています。(Microsoft Learn)
判断の目安は次のとおりです。
| 判断 | 例 | 理由 |
|---|---|---|
trueにする | パラメータの違いによって、返るトークンのclaims、利用条件、セッション、対象リソースが変わる | 異なる条件のトークンを同じキャッシュとして扱うと、誤ったトークンを再利用する恐れがある |
falseを検討する | 表示やリクエスト補助だけに使われ、トークン内容に影響しないパラメータ | キャッシュキーに含めると、不要にキャッシュが分断される可能性がある |
| 判断できない | 仕様書や提供元の説明がなく、トークンへの影響が不明 | 提供元に確認する。安易にfalseへ倒さない |
失敗しやすいのは、「キャッシュヒット率を上げたいからfalseにする」という判断です。認証パラメータがトークンの内容や有効性に関わる場合、キャッシュヒット率よりも正しいトークンを返すことが優先されます。逆に、何でもtrueにするとキャッシュが細かく分かれ、対話型認証の回数やトークン取得回数が増える可能性があります。
Azure.Core 1.55.0への更新確認
NuGet GalleryではAzure.Core 1.55.0が公開されており、.NET CLIでは次の形式で追加できます。NuGetページ上ではAzure.Core 1.55.0が.NET 8.0、.NET Standard 2.0、.NET Framework 4.6.2などを対象にしていることも確認できます。([NuGet][5])
dotnet add package Azure.Core --version 1.55.0
Central Package Managementを使っている場合は、Directory.Packages.propsも確認してください。
<ItemGroup>
<PackageVersion Include="Azure.Core" Version="1.55.0" />
</ItemGroup>
現在解決されているバージョンは、次のコマンドで確認できます。
dotnet list package --include-transitive
Windows環境で絞り込みたい場合は、次のように確認できます。
dotnet list package --include-transitive | findstr Azure.Core
macOSやLinuxでは次のように確認します。
dotnet list package --include-transitive | grep Azure.Core
Azure.Coreは多くのAzure SDKクライアントライブラリから推移的に参照されます。明示的にAzure.Coreを更新していなくても、別パッケージの更新でバージョンが変わることがあります。特に大規模な.NETプロジェクトでは、アプリ本体、共通ライブラリ、テストプロジェクトでAzure.Coreのバージョンが意図せず分かれていないか確認してください。
移行時に確認すべきポイント
追加パラメータが本当に必要か確認する
AdditionalQueryParametersは、認証リクエストをカスタマイズするための強力な入口です。しかし、通常の認証エラーを回避するために独自パラメータを入れる用途には向きません。
まず確認すべきことは次の3つです。
| 確認項目 | 見るべき内容 |
|---|---|
| 仕様上の要件 | Microsoft Entra、対象サービス、上位ライブラリのドキュメントで追加パラメータが明示されているか |
| 対象credential | そのcredentialがMSAL-backedとして扱われ、追加パラメータを受け取る経路に乗るか |
| キャッシュ影響 | パラメータ差分で返るトークンが変わるか |
PRの説明でも、この機能はMSAL-backed credentialsでのみ尊重されるとされています。つまり、すべてのAzure Identity credentialに同じように効くわけではありません。(GitHub)
Experimental警告を雑に消さない
APIには実験的機能であることを示す属性が付いており、API surface上でもExperimentalAttribute("AZID0001")が確認できます。(GitHub)
警告を消す場合は、プロジェクト全体でまとめて無効化するより、利用箇所を限定して抑制する方が安全です。
#pragma warning disable AZID0001
options.AdditionalQueryParameters["<required-param-name>"] =
(Value: "<required-param-value>", IncludeInCacheKey: true);
#pragma warning restore AZID0001
このように範囲を絞れば、将来ほかの実験的APIを誤って使ったときに気づきやすくなります。
credential生成後に変更しても反映される前提にしない
PRでは、AdditionalQueryParametersのdeep copyやsnapshotに関するテストが追加されています。これは、共有された可変dictionaryによる副作用を避けるための実装です。(GitHub)
そのため、次のような書き方は避けてください。
var options = new InteractiveBrowserCredentialOptions();
var credential = new InteractiveBrowserCredential(options);
// 生成後に追加しても、期待どおり反映される前提にしない
options.AdditionalQueryParameters["<required-param-name>"] =
(Value: "<required-param-value>", IncludeInCacheKey: true);
基本は、credentialを生成する前に必要なパラメータをすべて設定します。
var options = new InteractiveBrowserCredentialOptions();
#pragma warning disable AZID0001
options.AdditionalQueryParameters["<required-param-name>"] =
(Value: "<required-param-value>", IncludeInCacheKey: true);
#pragma warning restore AZID0001
var credential = new InteractiveBrowserCredential(options);
機密情報をクエリパラメータに入れない
追加クエリパラメータは、認証リクエストのURLに付与される可能性があります。アクセストークンそのものではなくても、URL、プロキシ、診断ログ、ブラウザ履歴、監査ログなどに残る可能性を考慮してください。
特に避けるべきものは次のとおりです。
| 入れてはいけない情報 | 理由 |
|---|---|
| シークレット、APIキー、パスワード | URLやログに残るリスクが高い |
| 個人情報 | 認証ログや監査ログの取り扱いが難しくなる |
| 長大なJSONや状態情報 | URL長制限やログ肥大化の原因になる |
| 仕様で定義されていない独自値 | 認証エラーや将来の互換性問題を招く |
追加パラメータが必要な場合でも、値は最小限にし、ログ出力や監査ルールも併せて見直してください。
テストで見るべき観点
本番導入前には、単に「ビルドが通る」だけでなく、認証リクエストとトークンキャッシュの挙動を確認します。
| テスト観点 | 確認内容 |
|---|---|
| リクエスト付与 | 認証リクエストに必要なパラメータが含まれるか |
| キャッシュ分離 | IncludeInCacheKey: trueにしたパラメータを変えたとき、誤ったトークンが再利用されないか |
| キャッシュ効率 | falseでよいパラメータをtrueにして、不要な再認証が増えていないか |
| null/empty値 | 空値を渡した場合の挙動がアプリ要件と合うか |
| credential差分 | InteractiveBrowserCredential、DefaultAzureCredentialなど、実際に使うcredentialごとに期待どおりか |
| ログ | 追加パラメータが不要にログへ残っていないか |
PRでも、MSAL builderへの転送、snapshot、null/empty値の扱いを確認するテストが追加されています。実務でも、これに近い観点で回帰テストを用意すると安全です。(GitHub)
実装判断のおすすめフロー
AdditionalQueryParametersを使うか迷った場合は、次の順で判断してください。
| 順序 | 判断内容 | 結果 |
|---|---|---|
| 1 | 追加クエリパラメータが公式仕様や上位機能の要件に明記されているか | 明記がなければ使わない |
| 2 | 利用するcredentialがMSAL-backedで、この機能の対象か | 対象外なら別の実装方法を検討 |
| 3 | パラメータがトークン内容や有効性に影響するか | 影響するならIncludeInCacheKey: trueを検討 |
| 4 | Experimental APIを受け入れられるか | 将来変更に備えてラッパー化 |
| 5 | テストとロールバック手段があるか | ない場合は本番適用を急がない |
実務では、次のように小さなヘルパーに閉じ込めると、将来API名や型が変わった場合の修正範囲を限定できます。
using Azure.Identity;
public static class CredentialOptionsExtensions
{
public static void AddRequiredAuthParameter(
this TokenCredentialOptions options,
string name,
string value,
bool includeInCacheKey)
{
#pragma warning disable AZID0001
options.AdditionalQueryParameters[name] =
(Value: value, IncludeInCacheKey: includeInCacheKey);
#pragma warning restore AZID0001
}
}
利用側は次のように書けます。
var options = new InteractiveBrowserCredentialOptions
{
TenantId = "<tenant-id>",
ClientId = "<client-id>"
};
options.AddRequiredAuthParameter(
name: "<required-param-name>",
value: "<required-param-value>",
includeInCacheKey: true);
var credential = new InteractiveBrowserCredential(options);
Experimental APIをアプリ全体に散らばらせないことが、今回の更新を安全に取り込む最大のポイントです。
よくある疑問
Azure.Core 1.55.0に上げれば全員が対応する必要がありますか
いいえ。追加クエリパラメータを使わない通常のAzure SDK利用では、基本的にコード変更は不要です。Azure.Core 1.55.0の機能追加として存在しますが、使わなければ認証リクエストに独自パラメータは付与されません。(GitHub)
どのcredentialでも有効ですか
いいえ。PRの説明では、この機能はMSAL-backed credentialsでのみ尊重されるとされています。マネージドIDや開発ツール連携など、認証経路によっては追加パラメータが反映されない場合があります。(GitHub)
MSALのWithExtraQueryParametersを直接呼ぶ必要がありますか
Azure Identity credentialを使っているアプリでは、通常は直接MSAL builderを操作しません。今回の変更は、Azure SDK側のTokenCredentialOptionsからMSAL側のWithExtraQueryParametersへ渡すための入口です。MSALのAPI自体には、追加パラメータを認証リクエストへ付与し、キャッシュキーへの含有可否を制御するオーバーロードがあります。(Microsoft Learn)
本番環境で使ってもよいですか
必要性が明確で、テストとロールバック手段がある場合に限定して使うのが現実的です。PRでは、この機能が最初のイテレーションでありExperimentalとして導入され、将来の実装で設計が変わる可能性があるとされています。(GitHub)
今回の更新で取るべき次のアクション
今回のAzure SDK documentation updateで確認すべきことは、AdditionalQueryParametersを使うかどうかではなく、自分のアプリの認証要件に「MSALへ追加クエリパラメータを渡す必要」があるかどうかです。
まず、dotnet list package --include-transitiveでAzure.Coreの解決バージョンを確認してください。次に、Microsoft Entra認証で独自パラメータを必要とする機能を使っているかを確認します。該当する場合は、AdditionalQueryParametersをcredential生成前に設定し、IncludeInCacheKeyを仕様に基づいて判断し、Experimental APIを局所的に扱う実装にします。
通常のAzure SDK利用者にとっては大きな移行作業ではありません。しかし、認証フローを拡張しているライブラリ作者や社内共通基盤の担当者にとっては、キャッシュキー、ログ、credentialごとの差分を見落とすとトラブルにつながる変更です。必要な場所だけに導入し、将来のAPI変更に備えて薄いラッパーとテストを用意しておくのが安全です。
[5]: https://www.nuget.org/packages/Azure.Core/1.55.0 “
NuGet Gallery
| Azure.Core 1.55.0
“

コメント