ご利用のエージェントで認証を構成する

Azure Bot Service のリソースのプロビジョニングが完了したら、エージェントが Azure Bot Service で認証できるように構成できます。 Microsoft 365 エージェント SDK には認証の構成に柔軟なオプションが用意されているため、アプリケーションのニーズやセキュリティ要件に最適な方法を選択できます。

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

Microsoft.Agents.Athentication.Msal パッケージは、コア認証プロバイダーである MsalAuth クラスを提供します。 これは、以下の種類の認証情報に対して構成できます。

  • クライアント シークレットを使用したシングルテナントとクライアント シークレットを使用したマルチテナント
  • サムプリントを使用したクライアント証明書
  • サブジェクト名を使用したクライアント証明書 (SN+I を含む)
  • ユーザー割り当てマネージド ID
  • システム割り当てマネージド ID
  • フェデレーション資格情報
  • ワークロード ID

認証パッケージをインストールする

NuGet から MSAL 認証パッケージをインストールする

dotnet add package Microsoft.Agents.Authentication.Msal

シングルテナントとマルチテナント

クライアント シークレット認証は、シングルテナント構成とマルチテナント構成の両方をサポートします。

注意

マルチテナントの場合、Azure Bot インスタンスをマルチテナントとして構成し、Microsoft Entra ID アプリ登録を 任意の組織ディレクトリのアカウント (任意の Microsoft Entra ID テナント - マルチテナント) として構成する必要があります。 詳細については、シングルテナント アプリとマルチテナント アプリ を参照してください。

接続の構成

MSAL 認証パッケージを使用すると、Agents Framework ホスティング エンジンで複数の異なるクライアントを作成および使用できます。 MSAL 認証パッケージでは、アプリケーション構成ファイル内で複数の接続構成を指定できます。 各接続構成ごとに、外部サービスや他のエージェントとの通信をサポートする名前付き認証クライアントを作成できます。

認証の種類ごとの環境変数

エージェントは実行時に環境変数から MSAL 構成を取得します。

以下のセクションでは、MSAL 認証でサポートされている各認証の種類に対する必須および任意の構成設定と、各種類の構成スニペットの例について説明します。

クライアント シークレットを使用したシングル テナント

クライアント シークレットで認証するシングルテナント接続を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
ClientId 文字列 Null アクセス トークンの作成時に使用する ClientId (AppId) です。
ClientSecret string Null AuthType が ClientSecret の場合、クライアントに関連付けられたシークレットは、テストおよび開発目的でのみ使用する必要があります。
AuthorityEndpoint 文字列 Null 存在する場合、トークンを要求する権限として使用されます。
TenantId 文字列 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"
          ],
      }
    }
  }

クライアント シークレットを使用したマルチテナント

クライアント シークレットで認証するマルチテナント接続を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
ClientId 文字列 Null アクセス トークンの作成時に使用する ClientId (AppId) です。
ClientSecret string Null AuthType が ClientSecret の場合、クライアントに関連付けられたシークレットは、テストおよび開発目的でのみ使用する必要があります。
AuthorityEndpoint 文字列 Null 存在する場合、トークンを要求する権限として使用されます。
TenantId 文字列 Null 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます
スコープ 文字列リスト Null トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます

以下は、クライアント シークレットを使用したマルチテナント向けの 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"
          ],
      }
    }
  }

ユーザー割り当てマネージド ID

ユーザー割り当てマネージド ID を使用してトークン取得を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
ClientId 文字列 Null マネージド ID ClientId (アクセス トークン作成時に使用)

注意

エージェントでマネージド ID の種類を使用する場合、ホストまたはクライアントを Azure サービスで実行する必要があり、さらにそのサービスをシステム割り当てマネージド ID またはユーザー割り当てマネージド ID のいずれかを使用して設定する必要があります。

以下は、ユーザー割り当てマネージド ID 向けの appsettings の例です。

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "UserManagedIdentity",
        "ClientId": "{{BOT_ID}}",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  }

システム割り当てマネージド ID

SystemManagedIdentity を使用すると、エージェントは指定されたクライアント ID を無視し、システム割り当てマネージド ID を使用します。

注意

エージェントでマネージド ID の種類を使用する場合、ホストまたはクライアントを Azure サービスで実行する必要があり、さらにそのサービスをシステム割り当てマネージド ID またはユーザー割り当てマネージド ID のいずれかを使用して設定する必要があります。

以下は、システム割り当てマネージド ID 認証の種類向けの appsettings の例です。

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "SystemManagedIdentity",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  }

フェデレーション資格情報

フェデレーション資格情報をアクセス トークンと交換する接続を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
ClientId 文字列 Null アクセス トークンの作成時に使用する ClientId (AppId) です。
AuthorityEndpoint 文字列 Null 存在する場合、トークンを要求する権限として使用されます。
TenantId 文字列 Null 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます
スコープ 文字列リスト Null トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます
FederatedClientId 文字列 Null マネージド ID ClientId (アクセス トークン作成時に使用)

以下は、Federated Credentials 向けの 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"
        ]
      }
    }
  }

ワークロード ID

フェデレーション トークン ファイルを使用したワークロード ID 認証を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
ClientId 文字列 Null アクセス トークンの作成時に使用する ClientId (AppId) です。
AuthorityEndpoint 文字列 Null 存在する場合、トークンを要求する権限として使用されます。
TenantId 文字列 Null 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます
スコープ 文字列リスト Null トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます
FederatedTokenFile 文字列 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 クライアント アサーション オプション

フェデレーテッド認証情報やワークロード ID フローのクライアント アサーション コンテンツをカスタマイズするには、これらのオプション設定を使用します。

設定名 タイプ 既定値 内容
ClientId 文字列 Null 署名付きアサーションが要求されるクライアント ID
TokenEndpoint 文字列 Null 目的のトークン エンドポイント
請求 文字列 Null クライアント アサーションに含める要求
ClientCapabilities String[] 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,
        }
      }
    }
  }

サブジェクト名を使用した証明書 (SN+I を含む)

証明書のサブジェクト名 (SN+I シナリオを含む) による証明書ベースの認証を構成するには、これらの設定を使用します。

AuthType タイプ 既定値 内容
AuthorityEndpoint 文字列 Null 存在する場合、トークンを要求する権限として使用されます。
TenantId 文字列 Null 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます
スコープ 文字列リスト Null トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます
ClientId 文字列 Null アクセス トークンの作成時に使用する ClientId (AppId) です。
CertSubjectName 文字列 Null AuthType が CertificateSubjectName の場合、これが求められるサブジェクト名です
CertStoreName 文字列 「My」 AuthType が CertificateSubjectName または Certificate の場合、検索対象の証明書ストアを示します
ValidCertificateOnly ブール はい 証明書に有効なチェーンが必要です。
SendX5C ブール False 適切な構成で証明書の自動ローテーションを有効にします。

以下は、Subject Name および Issuer (SNI) にサブジェクト名を使用し、マルチテナント構成に対応した証明書の設定例です:

  "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 とシングルテナント環境における「Certificate Subject Name」の設定例です:

  "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"
        ]
      }
    }
  },

サムプリントを使用したクライアント証明書

証明書サムプリントによる証明書ベースの認証を構成するには、これらの設定を使用します。

AuthType タイプ 既定値 内容
AuthorityEndpoint 文字列 Null 存在する場合、トークンを要求する権限として使用されます。
TenantId 文字列 Null 存在し、かつ AuthorityEndpoint が null の場合、トークンを要求する Authority を作成するために使用されます
スコープ 文字列リスト Null トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます
ClientId 文字列 Null アクセス トークンの作成時に使用する ClientId (AppId) です。
CertThumbprint 文字列 Null 読み込む証明書のサムプリント。AuthType が Certificate に設定されている場合にのみ有効
CertStoreName 文字列 「My」 AuthType が CertificateSubjectName または Certificate の場合、検索対象の証明書ストアを示します
ValidCertificateOnly ブール はい 証明書に有効なチェーンが必要です。
SendX5C ブール False 適切な構成で証明書の自動ローテーションを有効にします。

以下は、証明書サムプリントを使用した証明書向けの 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 の既定設定をエージェントに追加するサービス プロバイダー拡張機能を提供します。

以下は、Program.cs クラスにおける ASP.NET コア ホスト向けの既定の MSAL 構成プロバイダーの例です。

これは登録済みの IConnections インスタンスによって管理されています。 AddAgent を使用すると、IConnections インスタンスが既定で追加されます。

// 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 からトークンを取得するための一般的な設定を制御する、いくつかの共有構成オプションがあります。

これらの設定は次のとおりです:

MSAL 要求のタイムアウト、再試行動作、ログの詳細の制御を行うには、以下の共有設定を使用します。

設定名 タイプ 既定値 内容
MSALRequestTimeout TimeSpan 30 秒 この設定は、要求の送信後、クライアントが Microsoft Entra ID からの応答を待機する時間を制御します。
MSALRetryCount Int 3 この設定は、プロバイダーがトークン取得の個別リクエストに対して行う再試行の回数を制御します。
MSALEnabledLogPII Bool False この設定は、MSAL が関連付けられたロガーに個人データを提供するかどうかを制御します。

これらの設定は、MSAL 認証プロバイダーを使用して作成されるすべてのクライアントと共有されます。 これらの設定は、IConfiguration リーダーによって、"MSALConfiguration" という名前の構成セクションから読み込まれることを想定しています。

注意

MSALConfiguration は任意の構成です。 この構成を行わない場合、これらの値の既定の構成が使用されます。

以下は、appsettings.json ファイル内のエントリの例です。

{
  "MSALConfiguration": {
    "MSALEnabledLogPII": "true",
    "MSALRequestTimeout": "00:00:40",
    "MSALRetryCount": "1"
  },
}

この場合、この設定ブロックは、MSAL プロバイダーで作成されたすべての MSAL クライアントに対し、個人データのログ記録を有効化し、タイムアウトを 40 秒に設定し、再試行回数を 1 に減らすよう指示します。

この拡張機能は、IConfiguration オブジェクト内で "MSALConfiguration" という名前の構成セクションを検索し、そこから MSAL 構成オブジェクトを作成します。

MSALConfig セクションが 見つからない 場合、既定値を使用して MSAL 構成オブジェクトを作成します。

    // Add default agent MsalAuth support
    builder.Services.AddDefaultMsalAuth(builder.Configuration);

    // Register your AgentApplication
    builder.AddAgent<MyAgent>();

認証のログ記録のサポート

MSAL 認証システムでは、トークン取得のトラブルシューティングが必要な場合に備え、利用統計情報統合の認証フローを個別にログ記録できます。

ログ記録を有効にするには、アプリケーションの appsettings に Microsoft.Agents.Authentication.Msal のエントリを追加し、接続に対するトークン操作を報告する ILogger を設定します。 MSALEnabledLogPII オプションを追加すると、接続の個人情報も含まれます。

以下は、この場合のログ記録ブロックの例です。

  "Logging": {
    "LogLevel": {
      "Default": "Warning",
      "Microsoft.Agents": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
      "Microsoft.Agents.Authentication.Msal": "Trace"
    }
  }

この場合、Microsoft.Agents.Authentication.Msal を含む複数のモジュールでログ記録が有効化されており、MSAL のトレースレベルは「Trace」に設定されています。

JavaScript SDK には、ターゲット チャネルにアクティビティを送信するための JSON Web Token (JWT) を取得するために、AuthenticationProvider が必要です。 詳細については、「Microsoft ID プラットフォームのアクセス トークン」を参照してください。

@microsoft/agents-hosting パッケージは、Microsoft Authentication Library (MSAL) に基づく既定の認証プロバイダーを提供します。 これは、以下の認証の種類に対して構成できます。

  • クライアント シークレットを使用したシングル テナント
  • クライアント シークレットを使用したマルチテナント
  • ユーザー マネージド ID
  • システム マネージド ID
  • フェデレーション資格情報
  • ワークロード ID
  • 証明書

認証パッケージをインストールする

npm から MSAL 認証パッケージをインストールします。

npm install @microsoft/agents-hosting

シングルテナントとマルチテナント

クライアント シークレットとクライアント証明書認証は、シングルテナント構成とマルチテナント構成の両方をサポートします。

ユーザー割り当てマネージド ID、システム マネージド ID、ェデレーション資格情報、およびワークロード ID は、シングルテナント構成のみをサポートします。

注意

マルチテナントの場合、Azure Bot インスタンスをマルチテナントとして構成し、Microsoft Entra ID アプリ登録を 任意の組織ディレクトリのアカウント (任意の Microsoft Entra ID テナント - マルチテナント) として構成する必要があります。 詳細については、シングルテナント アプリとマルチテナント アプリ を参照してください。

接続の構成

MSAL 認証ライブラリを使用すると、Agents Framework ホスティング エンジンで複数の異なるクライアントを作成および使用できます。 MSAL 認証ライブラリを使用して、アプリケーション構成ファイル内で複数の接続構成を指定できます。 各接続構成ごとに、外部サービスや他のエージェントとの通信を可能にする名前付き認証クライアントを作成できます。

以下のセクションでは、MSAL 認証プロバイダーでサポートされる各認証の種類の必須および任意の構成設定について説明します。 また、各認証の種類の構成スニペットの例も紹介します。

認証の種類ごとの環境変数

エージェントはヘルパー関数 loadAuthConfigFromEnv(): AuthConfiguration を用いて、実行時に環境変数から MSAL 構成を取得します。 CloudAdapterAuthConfiguration で初期化されます。

接続設定は CONNECTIONS__<CONNECTION_NAME>__SETTINGS__<PROPERTY> の形式を使用します。

AUTHTYPE が存在する場合、SDK はその値を使ってトークン取得フローを選択します。 AUTHTYPE が省略されている場合、SDK はレガシ動作に切り替え、構成された資格情報プロパティから認証フローを自動的に判断します。

クライアント シークレットを使用したシングル テナント

クライアント シークレットで認証するシングルテナント接続を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アプリ登録のクライアント ID (アプリ ID)。
CLIENTSECRET 文字列 なし アプリ登録に関連付けられたシークレット。 テストおよび開発目的でのみ使用してください。
TENANTID 文字列 なし アプリ登録用の Microsoft Entra ID テナント ID。
AUTHTYPE 文字列 なし ClientSecret に設定します。
SCOPE 文字列 なし 呼び出し元からスコープが提供されない場合にトークンを要求するための、既定のリソース スコープ。
AUTHORITY 文字列 なし 存在する場合、トークンを要求する権限として使用されます。 設定しない場合の既定値は https://login.microsoftonline.com/{TENANTID} です。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=ClientSecret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET={app-registration-secret}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

クライアント シークレットを使用したシングル テナントは、ローカル開発に推奨される構成です。

クライアント シークレットを使用したマルチテナント

クライアント シークレットを使用するマルチテナント シナリオでは、認証エンドポイントを botframework.com テナントに設定します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アプリ登録のクライアント ID (アプリ ID)。
CLIENTSECRET 文字列 なし アプリ登録に関連付けられたシークレット。 テストおよび開発目的でのみ使用してください。
AUTHTYPE 文字列 なし ClientSecret に設定します。
AUTHORITY 文字列 なし マルチテナントの場合は、https://login.microsoftonline.com/botframework.com に設定します。
SCOPE 文字列 なし 呼び出し元からスコープが提供されない場合にトークンを要求するための、既定のリソース スコープ。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=ClientSecret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET={app-registration-secret}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/botframework.com
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

UserManagedIdentity

これらの設定を使用して、ユーザー割り当てマネージド ID によるトークン取得を構成します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アクセストークンを作成する際に使用する、マネージド ID クライアント ID。
AUTHTYPE 文字列 なし UserManagedIdentity に設定します。
SCOPE 文字列 なし 呼び出し元からスコープが提供されない場合にトークンを要求するための、既定のリソース スコープ。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

マネージド IDは、運用環境シナリオで推奨される構成です。 詳細については、Azure リソースのマネージド ID の概要に関するページをご覧ください。

注意

マネージド ID の種類を使用する場合、ホストまたはクライアントは、システム割り当てマネージド ID またはユーザー割り当てマネージド ID が設定された Azure サービス内で実行されている必要があります。 Azure リソース用マネージド ID をサポートしている Azure サービスを確認するには、Azure リソース用マネージド ID を参照してください。

SystemManagedIdentity

認証の種類 SystemManagedIdentity を使用する場合、クライアント ID は無視され、サービスのシステム マネージド ID が使用されます。

設定名 タイプ 既定値 内容
AUTHTYPE 文字列 なし SystemManagedIdentity に設定します。
SCOPE 文字列 なし 呼び出し元からスコープが提供されない場合にトークンを要求するための、既定のリソース スコープ。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

注意

マネージド ID の種類を使用する場合、ホストまたはクライアントは、システム割り当てマネージド ID またはユーザー割り当てマネージド ID が設定された Azure サービス内で実行されている必要があります。 Azure リソース用マネージド ID をサポートしている Azure サービスを確認するには、Azure リソース用マネージド ID を参照してください。

FederatedCredentials

フェデレーション資格情報を通じて認証するシングルテナント アプリを構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アプリ登録のクライアント ID (アプリ ID)。
TENANTID 文字列 なし アプリ登録用の Microsoft Entra ID テナント ID。
AUTHTYPE 文字列 なし FederatedCredentials に設定します。
AUTHORITY 文字列 なし 存在する場合、トークンを要求する権限として使用されます。 設定しない場合の既定値は https://login.microsoftonline.com/{TENANTID} です。
SCOPE 文字列 なし 呼び出し元からスコープが提供されない場合にトークンを要求するための、既定のリソース スコープ。
FICCLIENTID 文字列 なし フェデレーション資格情報の外部トークンを取得するために使用するマネージド ID クライアント ID。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=FederatedCredentials
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/{tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__FICCLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

詳細については フェデレーション ID 資格情報を使用した認証 を参照してください。

WorkloadIdentity

Microsoft Entra ワークロード ID を通じてトークン取得を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
AUTHTYPE 文字列 なし WorkloadIdentity に設定します。
CLIENTID 文字列 なし アプリ登録のクライアント ID (アプリ ID)。
TENANTID 文字列 なし アプリ登録用の Microsoft Entra ID テナント ID。
AUTHORITY 文字列 なし 存在する場合、トークンを要求する権限として使用されます。 設定しない場合の既定値は https://login.microsoftonline.com/{TENANTID} です。
SCOPE 文字列 なし 呼び出し元からスコープが提供されない場合にトークンを要求するための、既定のリソース スコープ。
FEDERATEDTOKENFILE 文字列 なし ワークロード ID 環境によって提供されるフェデレーション トークン ファイルへのパス。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=WorkloadIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/{tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__FEDERATEDTOKENFILE=/var/run/secrets/azure/tokens/azure-identity-token
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

クライアント証明書を使用したシングルテナント

クライアント証明書を使用して認証を行うシングルテナント接続を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アプリ登録のクライアント ID (アプリ ID)。
TENANTID 文字列 なし アプリ登録用の Microsoft Entra ID テナント ID。
AUTHTYPE 文字列 なし Certificate に設定します。
CERTPEMFILE 文字列 なし PEM (プライバシー強化メール ) 証明書ファイルへのパス。
CERTKEYFILE 文字列 なし 証明書の秘密キー ファイルへのパス。
SCOPE 文字列 なし 呼び出し元からスコープが提供されない場合にトークンを要求するための、既定のリソース スコープ。
AUTHORITY 文字列 なし 存在する場合、トークンを要求する権限として使用されます。
SENDX5C ブール値 False 証明書ベースのトークン取得時に x5c ヘッダーの送信を有効にします。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=Certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

注意

JS SDK は PEM 証明書および秘密キー ファイルをディスクから直接読み取り、証明書サムプリントを自動的に計算します。 キー ファイルにはパスワードを設定しないでください。

クライアント証明書を使用したマルチテナント

クライアント証明書を使用するマルチテナント シナリオでは、認証エンドポイントを botframework.com テナントに設定します。

CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=Certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/botframework.com
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Azure Bot Framework SDK との後方互換性

Azure Bot Framework SDK と同じフォーマットを使用して構成を読み込むには、loadPrevAuthConfigFromEnv(): AuthConfiguration を使用してください。

既存の Bot Framework SDK 構成を移行する際は、これらのレガシ設定名を使用します。

設定名 タイプ 既定値 内容
MicrosoftAppTenantId 文字列 Null Microsoft Entra ID テナント ID (レガシ Bot Framework SDK 形式)。
MicrosoftAppId 文字列 Null アプリ登録のクライアント ID (アプリID) (レガシ Bot Framework SDK 形式)。
MicrosoftAppPassword 文字列 Null アプリのシークレット (レガシ Bot Framework SDK 形式)。
MicrosoftAppTenantId={tenant-id-guid}
MicrosoftAppId={app-id-guid}
MicrosoftAppPassword={app-registration-secret}

カスタム認証プロバイダー

カスタマイズされた認証プロバイダーを必要とするユーザーは、次のインターフェースを実装できます。

export interface AuthProvider {
  getAccessToken: (authConfig: AuthConfiguration, scope: string) => Promise<string>
}

例として、@azure/identity を使用して AuthProvider を実装します。

import { EnvironmentCredential } from "@azure/identity"
import { AuthProvider, AuthConfiguration } from "@microsoft/agents-hosting"
class DevTokenProvider implements AuthProvider {
  async getAccessToken(authConfig: AuthConfiguration): Promise<string> {
    const id = new EnvironmentCredential()
    const tokenResponse = await id.getToken("https://api.botframework.com/.default")
    return tokenResponse.token
  }

DevTokenProvider を使用して CloudAdapterをインスタンス化するには

const adapter = new CloudAdapter(authConfig, new DevTokenProvider())

amework.com/.default") return tokenResponse.token }


To instantiate the `CloudAdapter` by using the `DevTokenProvider`

```ts
const adapter = new CloudAdapter(authConfig, new DevTokenProvider())

Python エージェント SDK Microsoft Authentication Library (MSAL) パッケージは、Microsoft 365 エージェント SDK セルフホステッド エージェントからエージェント クライアントと外部サービス向けのアクセス トークンを作成するユーティリティです。

microsoft-agents-authentication-msal パッケージは、コア認証プロバイダーである MsalAuth クラスを提供します。 これは、以下の種類の認証情報に対して構成できます。

  • クライアント シークレット
  • クライアント証明書
  • ユーザー割り当てマネージド ID
  • システム割り当てマネージド ID

認証パッケージをインストールする

PyPI から MSAL 認証パッケージをインストールします。

pip install microsoft-agents-authentication-msal

シングルテナントとマルチテナント

クライアント シークレットとクライアント証明書認証は、シングルテナント構成とマルチテナント構成の両方をサポートします。

ユーザー割り当てマネージド ID とシステム割り当てマネージド ID は、シングルテナント構成のみをサポートします。

注意

マルチテナントの場合、Azure Bot インスタンスをマルチテナントとして構成し、Microsoft Entra ID アプリ登録を 任意の組織ディレクトリのアカウント (任意の Microsoft Entra ID テナント - マルチテナント) として構成する必要があります。 詳細については、シングルテナント アプリとマルチテナント アプリ を参照してください。

接続の構成

MSAL 認証ライブラリを使用すると、Agents Framework ホスティング エンジンで複数の異なるクライアントを作成および使用できます。 各接続構成ごとに、外部サービスや他のエージェントとの通信をサポートするための名前付き認証クライアントが作成されます。

ネストされた設定には、二重アンダースコア (__) の命名規則を使用した環境変数による構成を提供します。 MsalConnectionManagerクラスは環境変数を読み込んで、各接続名ごとに AgentAuthConfiguration インスタンスを構築します。

重要

接続マネージャーは、最低限、SERVICE_CONNECTION という名前の接続を必要とします。

認証の種類ごとの環境変数

エージェントは、実行時にヘルパー関数 load_configuration_from_env() を使用して、環境変数から MSAL 構成を取得します。

以下のセクションでは、サポートされている各認証の種類ごとに必要な構成設定について説明し、各種類の環境変数スニペットの例を紹介します。

クライアント シークレットを使用したシングル テナント

クライアント シークレットで認証するシングルテナント接続を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アプリ登録のクライアント ID (アプリ ID)。
CLIENTSECRET 文字列 なし アプリ登録に関連付けられたシークレット。 テストおよび開発目的でのみ使用してください。
TENANTID 文字列 なし アプリ登録用の Microsoft Entra ID テナント ID。
AUTHTYPE 文字列 ClientSecret 認証の種類。 ClientSecret に設定します。
SCOPES 文字列リスト なし トークンを要求するスコープの既定のリスト。 エージェント接続要求からスコープが渡されない場合にのみ使用されます。
AUTHORITY 文字列 なし 存在する場合、トークンを要求する権限として使用されます。 設定しない場合の既定値は https://login.microsoftonline.com/{TENANTID} です。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=ClientSecret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET={app-registration-secret}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}

クライアント シークレットを使用したシングル テナントは、ローカル開発に推奨される構成です。

クライアント シークレットを使用したマルチテナント

クライアント シークレットを使用するマルチテナント シナリオでは、認証エンドポイントを botframework.com テナントに設定します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アプリ登録のクライアント ID (アプリ ID)。
CLIENTSECRET 文字列 なし アプリ登録に関連付けられたシークレット。 テストおよび開発目的でのみ使用してください。
AUTHTYPE 文字列 ClientSecret 認証の種類。 ClientSecret に設定します。
AUTHORITY 文字列 なし マルチテナントの場合は、https://login.microsoftonline.com/botframework.com に設定します。
SCOPES 文字列リスト なし トークンを要求するスコープの既定のリスト。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=ClientSecret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET={app-registration-secret}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/botframework.com

ユーザー割り当てマネージド ID

ユーザー割り当てマネージド ID を使用してトークン取得を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アクセストークンを作成する際に使用する、マネージド ID クライアント ID。
AUTHTYPE 文字列 ClientSecret 認証の種類。 UserManagedIdentity に設定します。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity

マネージド IDは、運用環境シナリオで推奨される構成です。 詳細については、Azure リソースのマネージド ID の概要に関するページをご覧ください。

注意

マネージド ID の種類を使用する場合、ホストまたはクライアントは、システム割り当てマネージド ID またはユーザー割り当てマネージド ID が設定された Azure サービス内で実行されている必要があります。 Azure リソース用マネージド ID をサポートしている Azure サービスを確認するには、Azure リソース用マネージド ID を参照してください。

システム割り当てマネージド ID

認証の種類 SystemManagedIdentity を使用する場合、クライアント ID は無視され、サービスのシステム マネージド ID が使用されます。

設定名 タイプ 既定値 内容
AUTHTYPE 文字列 ClientSecret 認証の種類。 SystemManagedIdentity に設定します。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity

注意

マネージド ID の種類を使用する場合、ホストまたはクライアントは、システム割り当てマネージド ID またはユーザー割り当てマネージド ID が設定された Azure サービス内で実行されている必要があります。 Azure リソース用マネージド ID をサポートしている Azure サービスを確認するには、Azure リソース用マネージド ID を参照してください。

クライアント証明書を使用したシングル テナント

クライアント証明書を使用して認証を行うシングルテナント接続を構成するには、これらの設定を使用します。

設定名 タイプ 既定値 内容
CLIENTID 文字列 なし アプリ登録のクライアント ID (アプリ ID)。
TENANTID 文字列 なし アプリ登録用の Microsoft Entra ID テナント ID。
AUTHTYPE 文字列 ClientSecret 認証の種類。 certificate に設定します。
CERTPEMFILE 文字列 なし PEM (プライバシー強化メール ) 証明書ファイルへのパス。
CERTKEYFILE 文字列 なし 証明書の秘密キー ファイルへのパス。
SCOPES 文字列リスト なし トークンを要求するスコープの既定のリスト。
AUTHORITY 文字列 なし 存在する場合、トークンを要求する権限として使用されます。
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}

注意

Python SDK は PEM 証明書と秘密キー ファイルをディスクから直接読み取り、証明書サムプリントを自動的に計算します。 キー ファイルにはパスワードを設定しないでください。

クライアント証明書を使用したマルチテナント

クライアント証明書を使用するマルチテナント シナリオでは、認証エンドポイントを botframework.com テナントに設定します。

CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/botframework.com

接続マネージャーの設定

MsalConnectionManager クラスはエージェントの複数の認証接続を管理できます。 接続構成を読み取り、名前付き接続ごとに MsalAuth インスタンスを作成します。

以下は、接続マネージャーを設定し、エージェントを起動する方法の例です。

from os import environ

from microsoft_agents.hosting.aiohttp import start_agent_process, CloudAdapter
from microsoft_agents.hosting.core import Authorization, AgentApplication, TurnState, MemoryStorage

from dotenv import load_dotenv
from aiohttp.web import Request, Response, Application, run_app
from microsoft_agents.authentication.msal import MsalConnectionManager
from microsoft_agents.activity import load_configuration_from_env

def start_server(
    agent_application: AgentApplication, auth_configuration: AgentAuthConfiguration
):
    async def entry_point(req: Request) -> Response:
        agent: AgentApplication = req.app["agent_app"]
        adapter: CloudAdapter = req.app["adapter"]
        return await start_agent_process(req, agent, adapter)

    APP = Application()
    APP.router.add_post("/api/messages", entry_point)
    APP["agent_configuration"] = auth_configuration
    APP["agent_app"] = agent_application
    APP["adapter"] = agent_application.adapter

    try:
        run_app(APP, host="localhost", port=environ.get("PORT", 3978))
    except Exception as error:
        raise error

load_dotenv()
agents_sdk_config = load_configuration_from_env(environ)

STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)

AGENT_APP = AgentApplication[TurnState](
    storage=STORAGE, adapter=ADAPTER, authorization=AUTHORIZATION, **agents_sdk_config
)

start_server(
    agent_application=AGENT_APP, auth_configuration=CONNECTION_MANAGER.get_default_connection_configuration()
)

Python エージェントで MsalConnectionManager を使用にする完全なコード例は、Python クイックスタート サンプル を参照してください。

カスタム認証プロバイダー

カスタマイズされた認証プロバイダーを必要とするユーザーは、AccessTokenProviderBase 基本クラスを実装できます。

from microsoft_agents.hosting.core import AccessTokenProviderBase

class CustomAuthProvider(AccessTokenProviderBase):
    async def get_access_token(
        self, resource_url: str, scopes: list[str], force_refresh: bool = False
    ) -> str:
        # Implement custom token acquisition logic
        token = await your_custom_token_logic(resource_url, scopes)
        return token

認証のログ記録のサポート

MSAL 認証システムは、ロガー名 microsoft_agents.authentication.msal で標準の Python logging モジュールを使用します。 トークン取得のトラブルシューティングのために認証フローの詳細なログ記録を有効にするには、アプリケーションでロガーを構成します。

import logging

logging.basicConfig(level=logging.WARNING)
logging.getLogger("microsoft_agents.authentication.msal").setLevel(logging.DEBUG)

セキュリティのベスト プラクティス

  • シークレットは Azure Key Vault または環境変数に格納し、決してソースコードにコミットしないでください。
  • 可能な限りマネージド ID を使用してください。これにより、シークレットの管理が不要になります。
  • クライアント シークレットや証明書は定期的に更新してください。
  • スコープとアクセス許可には最小権限の原則を適用してください。