.NET Agents SDK Microsoft Authentication Library (MSAL) 認証プロバイダーは、Microsoft 365 Agents SDK セルフホスト型エージェントからエージェント クライアントと外部サービス向けのアクセス トークンを作成するユーティリティです。
このユーティリティは、アクセス トークンの作成に使用できる複数の異なるプロファイルをサポートしています。 各アクセス トークンは、以下の認証タイプいずれかを使用して作成できま:
- ClientSecret を使用したシングルテナント と ClientSecret を使用したマルチテナント
- サムプリントを使用したクライアント証明書
- サブジェクト名を使用したクライアント証明書 (SN+I を含む)
- ユーザー管理の ID
- システム マネージド ID
- フェデレーション資格情報
- ワークロードアイデンティティ
接続を構成する
MSAL 認証プロバイダーを使用すると、Agents Framework ホスティング エンジンで複数の異なるクライアントを作成して使用できます。 MSAL 認証プロバイダーを使用すると、アプリケーション構成ファイルに複数の接続構成を指定できます。 各接続構成を使用して、外部サービスまたはその他のエージェントとの通信をサポートする名前付き認証クライアントを作成できます。
次のセクションでは、MSAL 認証プロバイダーでサポートされている認証の種類ごとに必要な構成設定とオプションの構成設定と、各種類の構成スニペットの例について説明します。
ClientSecret を使用したシングルテナント
| 設定名 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| ClientId | String | Null | アクセス トークンの作成時に使用する ClientId (AppId) です。 |
| ClientSecret | 文字列 | Null | AuthType が ClientSecret の場合、クライアントに関連付けられたシークレットは、テストおよび開発目的でのみ使用する必要があります。 |
| AuthorityEndpoint | String | Null | 存在する場合、トークンを要求する権限として使用されます。 |
| テナント識別子 | String | Null | 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます |
| スコープ | 文字列リスト | Null | トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます |
シングルテナント* ClientSecret向けの appsettings の例を以下に示します。
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "ClientSecret",
"ClientId": "{{BOT_ID}}",
"ClientSecret": "{{BOT_SECRET}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
],
}
}
}
ClientSecret を使用した MultiTenant
| 設定名 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| ClientId | String | Null | アクセス トークンの作成時に使用する ClientId (AppId) です。 |
| ClientSecret | 文字列 | Null | AuthType が ClientSecret の場合、クライアントに関連付けられたシークレットは、テストおよび開発目的でのみ使用する必要があります。 |
| AuthorityEndpoint | String | Null | 存在する場合、トークンを要求する権限として使用されます。 |
| テナント識別子 | String | Null | 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます |
| スコープ | 文字列リスト | Null | トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます |
マルチテナント ClientSecretの appsettings の例を次に示します。
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "ClientSecret",
"ClientId": "{{BOT_ID}}",
"ClientSecret": "{{BOT_SECRET}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
"Scopes": [
"https://api.botframework.com/.default"
],
}
}
}
UserManagedIdentity
| 設定名 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| ClientId | String | Null | マネージド ID ClientId (アクセス トークン作成時に使用) |
Note
マネージド ID の種類を使用する場合、ホストまたはクライアントは Azure サービスで実行されており、そのサービスを System-Assigned マネージド ID または User-Assigned マネージド ID で設定している必要があります。
UserManagedIdentity の appsettings の例を次に示します:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "UserManagedIdentity",
"ClientId": "{{BOT_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
SystemManagedIdentity
認証の種類 SystemManagedIdentityを使用する場合、クライアント ID は無視され、サービスのシステム マネージド ID が使用されます。
Note
マネージド ID の種類を使用する場合、ホストまたはクライアントは Azure サービスで実行されており、そのサービスを System-Assigned マネージド ID または User-Assigned マネージド ID で設定する必要があります。
SystemManagedIdentity 認証の種類の appsettings の例を次に示します:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "SystemManagedIdentity",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
FederatedCredentials
| 設定名 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| ClientId | String | Null | アクセス トークンの作成時に使用する ClientId (AppId) です。 |
| AuthorityEndpoint | String | Null | 存在する場合、トークンを要求する権限として使用されます。 |
| テナント識別子 | String | Null | 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます |
| スコープ | 文字列リスト | Null | トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます |
| フェデレーテッドクライアントID | String | Null | マネージド ID ClientId (アクセス トークン作成時に使用) |
FederatedCredentials の appsettings の例を次に示します:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "FederatedCredentials",
"ClientId": "{{BOT_ID}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
"FederatedClientId": "{{BOT_FEDERATED_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
WorkloadIdentity
| 設定名 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| ClientId | String | Null | アクセス トークンの作成時に使用する ClientId (AppId) です。 |
| AuthorityEndpoint | String | Null | 存在する場合、トークンを要求する権限として使用されます。 |
| テナント識別子 | String | Null | 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます |
| スコープ | 文字列リスト | Null | トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます |
| FederatedTokenFile | String | Null | トークン ファイル (AKS AZURE_FEDERATED_TOKEN_FILE env var と同じ) |
シングルテナント WorkloadIdentityの appsettings の例を次に示します。
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "WorkloadIdentity",
"ClientId": "{{BOT_ID}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
"FederatedTokenFile": "{{BOT_FEDERATED_TOKENFILE}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
オプションのフェデレーション認証またはワークロード ID クライアント アサーション オプション
| 設定名 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| ClientId | String | Null | 署名付きアサーションが要求されるクライアント ID |
| TokenEndpoint | String | Null | 目的のトークン エンドポイント |
| 請求 | String | Null | クライアント アサーションに含める要求 |
| ClientCapabilities | 文字列[] | Null | クライアント アプリケーションが宣言した機能。 |
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "WorkloadIdentity",
"ClientId": "{{BOT_ID}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
"FederatedTokenFile": "{{BOT_FEDERATED_TOKENFILE}}",
"Scopes": [
"https://api.botframework.com/.default"
],
"AssertionRequestOptions": {
"ClientId": null,
"TokenEndpoint": null,
"Claims": null,
"ClientCapabilities": null,
}
}
}
}
CertificateSubjectName
| 認証タイプ | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| AuthorityEndpoint | String | Null | 存在する場合、トークンを要求する権限として使用されます。 |
| テナント識別子 | String | Null | 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます |
| スコープ | 文字列リスト | Null | トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます |
| ClientId | String | Null | アクセス トークンの作成時に使用する ClientId (AppId) です。 |
| CertSubjectName | String | Null | AuthType が CertificateSubjectName の場合、これが求められるサブジェクト名です |
| CertStoreName | String | 「My」 | AuthType が CertificateSubjectName または Certificate の場合、検索対象の証明書ストアを示します |
| ValidCertificateOnly | bool | 正しい | 証明書に有効なチェーンが必要です。 |
| SendX5C | bool | いいえ | 適切な構成で証明書の自動ローテーションを有効にします。 |
サブジェクト名と発行者 (SNI) とマルチテナントの CertificateSubjectName のアプリ設定の例を次に示します。
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "CertificateSubjectName",
"ClientId": "{{BOT_ID}}",
"CertSubjectName": "{{BOT_CERT_SUBJECTNAME}}",
"SendX5C": true,
"AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
},
SN+I および CertificateSubjectName 向けの 用 appsettings の例は以下の通りです
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "CertificateSubjectName",
"ClientId": "{{BOT_ID}}",
"CertSubjectName": "{{BOT_CERT_SUBJECTNAME}}",
"SendX5C": true,
"AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
},
Certificate
| 認証タイプ | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| AuthorityEndpoint | String | Null | 存在する場合、トークンを要求する権限として使用されます。 |
| テナント識別子 | String | Null | 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます |
| スコープ | 文字列リスト | Null | トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます |
| ClientId | String | Null | アクセス トークンの作成時に使用する ClientId (AppId) です。 |
| CertThumbprint | String | Null | 読み込む証明書のサムプリント。AuthType が Certificate に設定されている場合にのみ有効 |
| CertStoreName | String | 「My」 | AuthType が CertificateSubjectName または Certificate の場合、検索対象の証明書ストアを示します |
| ValidCertificateOnly | bool | 正しい | 証明書に有効なチェーンが必要です。 |
| SendX5C | bool | いいえ | 適切な構成で証明書の自動ローテーションを有効にします。 |
証明書のサムプリントを使用した CertificateSubjectName の appsettings の例を次に示します。
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "Certificate",
"ClientId": "{{BOT_ID}}",
"CertThumbprint": "{{BOT_CERT_THUMBPRINT}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
},
MSAL の既定の構成のプロバイダー
セットアップを容易にするため、MSAL の既定設定をエージェントに追加するサービス プロバイダー拡張機能を提供します。
ASP.NET Core ホスト用の既定の MSAL 構成プロバイダーの例を次に示します:
Program.cs クラス内。
これは登録済みの IConnections インスタンスによって管理されています。
AddAgent を使用する場合、既定で追加されます。
// Register your AgentApplication
builder.AddAgent<MyAgent>();
ただし、AddAgent を使用しない場合は、IConnections のインスタンスを登録する必要があります。
// Add Connections object to access configured token connections.
builder.Services.AddSingleton<IConnections, ConfigurationConnections>();
その他の MSAL 構成オプション
Microsoft Entra Identity からトークンを取得するための一般的な設定を制御する、いくつかの共有構成オプションがあります。
これらの設定は次のとおりです:
| 設定名 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| MSALRequestTimeout | TimeSpan | 30 秒 | この設定は、リクエスト送信後、クライアントが Entra ID からの応答を待機する時間を制御します。 |
| MSALRetryCount | 整数 | 3 | この設定は、プロバイダーがトークン取得の個別リクエストに対して行う再試行の回数を制御します |
| MSALEnabledLogPII | ブール | いいえ | この設定は、接続されたロガーに MSAL からの個人識別情報 (PII) データが提供されるかどうかを制御します |
これらの設定は、MSAL 認証プロバイダーを使用して作成されるすべてのクライアントと共有されます。 これらの設定は、IConfiguration Reader から読み込まれることを意図しており、設定セクション内の「MSALConfiguration」というセクションから読み込まれます。
Note
MSALConfiguration は省略可能な構成です。 この構成を設定しない場合は、これらの値の既定の構成が使用されます。
appsettings.json ファイル内のエントリの例を次に示します:
{
"MSALConfiguration": {
"MSALEnabledLogPII": "true",
"MSALRequestTimeout": "00:00:40",
"MSALRetryCount": "1"
},
}
この場合、この設定ブロックは、MSAL プロバイダーで作成されたすべての MSAL クライアントに対し、PII ログ記録を有効化し、タイムアウトを 40 秒に設定し、再試行回数を 1 に減らすよう指示します。
この拡張機能は、IConfiguration オブジェクト内で「MSALConfiguration」という名前の設定セクションを検索し、そこから MSAL 設定オブジェクトを作成します。
MSALConfig セクションが見つからない場合、既定の値を使用して MSAL 構成オブジェクトを作成します.
// Add default agent MsalAuth support
builder.Services.AddDefaultMsalAuth(builder.Configuration);
// Register your AgentApplication
builder.AddAgent<MyAgent>();
認証のログ記録のサポート
MSAL 認証システムでは、トークン取得のトラブルシューティングを行う必要がある場合に、テレメトリ統合用の認証フローの独立したログ記録が可能になります。
ログ記録を有効にするには、アプリケーションの設定に Microsoft.Agents.Authentication.Msal のエントリを追加し、接続のトークン操作を報告する ILogger を設定します。MSALEnabledLogPII オプションを追加している場合、これには接続の個人識別情報 (PII) も含まれます。
この場合のログ ブロックの例を次に示します:
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft.Agents": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.Agents.Authentication.Msal": "Trace"
}
}
この場合、Microsoft.Agents.Authentication.Msal を含む複数のモジュールでログ記録が有効化されており、MSAL のトレースレベルは「Trace」に設定されています。