.NET エージェントで認証を構成する

.NET Agents SDK Microsoft Authentication Library (MSAL) 認証プロバイダーは、Microsoft 365 Agents SDK セルフホスト型エージェントからエージェント クライアントと外部サービス向けのアクセス トークンを作成するユーティリティです。

このユーティリティは、アクセス トークンの作成に使用できる複数の異なるプロファイルをサポートしています。 各アクセス トークンは、以下の認証タイプいずれかを使用して作成できま:

接続を構成する

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」に設定されています。