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

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

パッケージ @microsoft/agents-hosting は、MSAL に基づく既定の認証プロバイダーを提供します。このプロバイダーは、次の種類の資格情報に対して構成できます。

  • クライアント シークレット
  • クライアント証明書
  • ユーザー割り当てのマネージドアイデンティティ
  • フェデレーテッド ID 資格情報 (FIC)

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

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

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

Note

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

各認証の種類の環境変数

この構成は、実行時に、ヘルパー関数 loadAuthConfigFromEnv(): AuthConfigurationを使用して環境変数から取得されます。 CloudAdapter インスタンスは、AuthConfigurationで初期化する必要があります。

指定された変数に基づいて、認証の種類は次のように推論されます。

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

設定名 タイプ デフォルト値 説明
テナントID String Null アプリ登録の Microsoft Entra ID テナント ID。
clientId String Null アプリ登録のクライアント ID (アプリ ID)。
clientSecret String Null アプリの登録に関連付けられているシークレット。 テストと開発の目的でのみ使用する必要があります。
tenantId={tenant-id-guid}
clientId={app-id-guid}
clientSecret={app-registration-secret}

これは、ローカル開発に推奨される構成です。

シングルテナント環境でクライアント証明書を使用する

設定名 タイプ デフォルト値 説明
テナントID String Null アプリ登録の Microsoft Entra ID テナント ID。
clientId String Null アプリ登録のクライアント ID (アプリ ID)。
certPemFile String Null PEM 証明書ファイルへのパス。
certKeyFile String Null 証明書の秘密キー ファイルへのパス。
tenantId={tenant-id-guid}
clientId={app-id-guid}
certPemFile={path-to-pem-file}
certKeyFile={path-to-key-file}

Note

キー ファイルではパスワードを使用しないでください。

ユーザー割り当てマネージド ID を使用した単一テナント

設定名 タイプ デフォルト値 説明
テナントID String Null アプリ登録の Microsoft Entra ID テナント ID。
clientId String Null アクセス トークンの作成時に使用するマネージド ID クライアント ID。
tenantId={tenant-id-guid}
clientId={app-id-guid}

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

Note

エージェントは、マネージド ID をサポートするすべての Azure サービスで実行する必要があります。 マネージド ID をサポートする Azure サービスを確認するには、 Azure リソースのマネージド ID に関するページを参照してください。 マネージド ID は、EntraID で構成されたものと一致する必要があります。 詳細については、「 マネージド ID を構成する方法」を参照してください。

フェデレーテッド ID 資格情報を持つシングル テナント

設定名 タイプ デフォルト値 説明
tenantId String Null アプリ登録の Microsoft Entra ID テナント ID。
clientId String Null アプリ登録のクライアント ID (アプリ ID)。
FICClientId String Null フェデレーテッド・アイデンティティ・クレデンシャルのマネージド・アイデンティティ・クライアントID。
tenantId={tenant-id-guid}
clientId={app-id-guid}
FICClientId={client-id-of-the-FIC}

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

ClientSecret を使用したマルチテナント

設定名 タイプ デフォルト値 説明
clientId String Null アプリ登録のクライアント ID (アプリ ID)。
clientSecret String Null アプリの登録に関連付けられているシークレット。 テストと開発の目的でのみ使用する必要があります。
clientId={app-id-guid}
clientSecret={app-registration-secret}

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

設定名 タイプ デフォルト値 説明
clientId String Null アプリ登録のクライアント ID (アプリ ID)。
certPemFile String Null PEM 証明書ファイルへのパス。
certKeyFile String Null 証明書の秘密キー ファイルへのパス。
clientId={app-id-guid}
certPemFile={path-to-pem-file}
certKeyFile={path-to-key-file}

Azure Bot Framework SDK に対する後方互換性

Azure Bot Framework SDK と同じ形式を使用して構成を読み込むには、別のヘルパー関数 loadBotAuthConfigFromEnv(): AuthConfigurationを提供します。

設定名 タイプ デフォルト値 説明
MicrosoftAppTenantId String Null Microsoft Entra ID テナント ID (従来の Bot Framework SDK 形式)。
MicrosoftAppId String Null アプリ登録のクライアント ID (アプリ ID) (従来の Bot Framework SDK 形式)。
Microsoftアプリケーションパスワード String 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>
}

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

import { EnvironmentCredential } from "@azure/identity"
import { AuthProvider, AuthConfiguration } from "@microsoft/agents-bot-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
  }

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

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