在 JavaScript 智能体中配置身份验证

JavaScript SDK 需要 AuthenticationProvider 来获取 JWT 令牌以将活动发送到目标渠道。 了解详细信息

@microsoft/agents-hosting 提供基于 MSAL 的默认身份验证提供程序,可针对以下类型的凭据配置该提供程序:

  • SingleTenant / MultiTenant
  • 客户端密码
  • 客户端证书
  • 用户分配的托管标识
  • 联合标识凭据

注释

MultiTenant 要求将 Azure 机器人实例配置为多组织,并将 EntraID 应用注册配置为任何组织目录中的帐户(任何 Microsoft Entra ID 租户 - 多组织),并且仅支持客户端密码客户端证书。 若要了解详细信息,请参阅单组织和多组织应用

每种身份验证类型的环境变量

使用帮助程序函数 loadAuthConfigFromEnv(): AuthConfiguration 在运行时从环境变量获取配置。 需要使用 AuthConfigurationCloudAdapter 实例进行初始化。

根据提供的变量,身份验证类型将按如下所述进行推理。

具有客户端密码的单组织

tenantId={tenant-id-guid}
clientId={app-id-guid}
clientSecret={app-registration-secret}

这是用于本地开发的推荐配置。

具有客户端证书的单组织

tenantId={tenant-id-guid}
clientId={app-id-guid}
certPemFile={path-to-pem-file}
certKeyFile={path-to-key-file}

注释

密钥文件不应使用任何密码。

具有用户分配的托管标识的单组织

tenantId={tenant-id-guid}
clientId={app-id-guid}

这是用于生产应用场景的建议配置。 若要了解详细信息,请参阅Azure 资源托管标识

注释

智能体需要在支持托管标识的任何 Azure 服务中运行。 若要查看哪些 Azure 服务支持托管标识,请参阅 Azure 资源托管标识。 托管标识应与 EntraID 中配置的标识匹配。 有关详细信息,请参阅如何配置托管标识

具有联合标识凭据的单组织

tenantId={tenant-id-guid}
clientId={app-id-guid}
FICClientId={client-id-of-the-FIC}

有关更多详细信息,请参阅使用联合标识凭据的身份验证

具有 ClientSecret 的多组织

clientId={app-id-guid}
clientSecret={app-registration-secret}

具有客户端证书的多组织

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={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-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
  }

若要使用 DevTokenProvider 实例化 CloudAdapter

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