JavaScript SDK 需要 AuthenticationProvider 来获取 JWT 令牌以将活动发送到目标渠道。 了解详细信息
包 @microsoft/agents-hosting 提供基于 MSAL 的默认身份验证提供程序,可针对以下类型的凭据配置该提供程序:
- SingleTenant / MultiTenant
- 客户端密码
- 客户端证书
- 用户分配的托管标识
- 联合标识凭据
注释
MultiTenant 要求将 Azure 机器人实例配置为多组织,并将 EntraID 应用注册配置为任何组织目录中的帐户(任何 Microsoft Entra ID 租户 - 多组织),并且仅支持客户端密码或客户端证书。 若要了解详细信息,请参阅单组织和多组织应用
每种身份验证类型的环境变量
使用帮助程序函数 loadAuthConfigFromEnv(): AuthConfiguration 在运行时从环境变量获取配置。 需要使用 AuthConfiguration 对 CloudAdapter 实例进行初始化。
根据提供的变量,身份验证类型将按如下所述进行推理。
具有客户端密码的单组织
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())