使用证书或 MSI 进行应用身份验证
可以使用基于证书或 MSI 的身份验证来验证机器人应用,而不是机器人 ID 和机密。 此身份验证解决了与使用Microsoft Entra ID和机器人机密相关的合规性问题。
先决条件
确保已将 Teams 机器人应用部署到 Azure,其中包含以下资源:
- Azure 机器人。
- 包含用于机器人身份验证的机密的 Entra ID。
- 托管机器人应用的资源,例如Azure 应用服务Azure Functions。
若要更新机器人应用以使用基于证书的身份验证,请执行以下操作:
-
在 Azure AD 中创建和上传证书
-
更新机器人应用代码
-
删除机器人机密
在 Azure AD 中创建和上传证书
若要使用证书进行机器人身份验证,请执行以下操作:
准备证书和私钥。
转到Azure 门户。
选择“应用注册”。
选择已注册的应用。
在左窗格中的 “管理”下,选择“ 证书 & 机密”。
在 “证书”下,选择“ 上传证书”。
此时会显示 “上传证书 ”窗口。
注意
使用以下文件类型之一上传证书 (公钥) :.cer、.pem、.crt。
上传你准备的证书。
输入 “说明”。
选择“添加”。
更新机器人应用代码
按照步骤更新机器人应用代码:
在 Visual Studio 或 Visual Studio Code 中打开机器人应用项目。
更新代码。
const credentialsFactory = new ConfigurationServiceClientCredentialFactory({
MicrosoftAppId: config.botId,
CertificatePrivateKey: '{your private key}',
CertificateThumbprint: '{your cert thumbprint}',
MicrosoftAppType: "MultiTenant",
});
const botFrameworkAuthentication = new ConfigurationBotFrameworkAuthentication(
{},
credentialsFactory
);
const adapter = new CloudAdapter(botFrameworkAuthentication);
builder.Services.AddSingleton<ServiceClientCredentialsFactory>((e) => new CertificateServiceClientCredentialsFactory("{your certificate}", "{your entra id}"));
确保测试机器人以确认操作与更新的身份验证一致。
删除机器人机密
在删除机器人密码之前,请确保机器人应用使用证书进行身份验证。
删除机器人机密:
转到Azure 门户。
选择“应用注册”。
选择已注册的应用。
在左窗格中的 “管理”下,选择“ 证书 & 机密”。
从 Entra 中删除机密。
机器人应用现在使用证书进行身份验证。
若要更新机器人应用以使用基于 MSI 的身份验证,请执行以下操作:
-
在 Azure AD 中使用 MSI 类型创建机器人服务
-
更新 MSI 的机器人应用代码
-
删除机器人机密
注意
创建后,无法修改 Azure 机器人 服务 ID 和类型。
在 Azure AD 中使用 MSI 类型创建机器人服务
若要使用 MSI 类型创建新的 Azure 机器人 服务,请执行以下步骤:
转到Azure 门户。
转到“主页”。
选择“ + 创建资源”。
在搜索框中,输入 Azure 机器人。
选择 Enter 键。
选择“ Azure 机器人”。
选择“创建”。
在机器人 句柄中输入机器人名称。
从下拉列表中选择 订阅 。
从下拉列表中选择 资源组 。
如果没有现有的资源组,可以创建新的资源组。 若要创建新的 Azure 机器人服务和托管标识,请执行以下步骤:
- 选择“ 新建”。
- 输入资源名称,然后选择“ 确定”。
- 从 “新建资源组 位置”下拉列表中选择一个位置。
在 “Microsoft应用 ID”下,选择“ 应用类型 ”作为 “用户分配的托管标识”。
在 “创建类型”中,选择“ 新建Microsoft应用 ID”。
OR
可以先手动创建托管标识,然后使用使用现有应用注册创建 Azure 机器人。
更新新的 Azure 机器人 消息传送终结点和通道,以匹配旧服务的终结点和通道。
转到应用托管资源。
选择 “设置 > ”“标识 > 用户分配”。
添加已创建的托管标识。
更新 MSI 的机器人应用代码
若要更新 MSI 的机器人应用代码,请执行以下步骤:
在 Visual Studio 或 Visual Studio Code 中打开机器人应用项目。
更新代码。
const credentialsFactory = new ConfigurationServiceClientCredentialFactory({
MicrosoftAppType: 'UserAssignedMsi',
MicrosoftAppId: '{your MSI’s client ID}',
MicrosoftAppTenantId: '{your MSI’s tenant ID}',
});
const botFrameworkAuthentication = new ConfigurationBotFrameworkAuthentication(
{},
credentialsFactory
);
const adapter = new CloudAdapter(botFrameworkAuthentication);
builder.Configuration["MicrosoftAppType"] = "UserAssignedMsi";
builder.Configuration["MicrosoftAppId"] = "{your MSI’s client ID}";
builder.Configuration["MicrosoftAppPassword"] = "{your MSI’s tenant ID}";
builder.Services.AddSingleton<BotFrameworkAuthentication, ConfigurationBotFrameworkAuthentication>();
BOT_ID
更新文件中的 .env
。
确保测试机器人以确认其操作与更新的身份验证一致。
删除机器人机密
在删除机器人密码之前,请确保机器人应用使用证书进行身份验证。
删除机器人机密:
转到Azure 门户。
选择“应用注册”。
选择已注册的应用。
在左窗格中的 “管理”下,选择“ 证书 & 机密”。
从 Entra 中删除机密。
机器人应用现在使用 MSI 进行身份验证。
另请参阅