如何在不使用Azure Bot Service的情况下为Bot Framework v4的Teams机器人添加认证?
无需Azure Bot Service为Teams机器人添加Azure AD认证的方案
是的,可以在不依赖Azure Bot Service的情况下,为基于Bot Framework SDK v4的Teams机器人配置Azure AD认证,以下是具体实现步骤:
一、Azure门户端配置
- 在Azure Active Directory中注册独立的应用程序:
- 进入Azure门户,找到Azure Active Directory,选择「应用注册」>「新注册」。
- 填写自定义应用名称,根据需求选择账户支持类型(如「任何组织目录中的账户和个人Microsoft账户」),重定向URI暂时留空,完成注册。
- 获取核心配置参数:
- 注册完成后,复制应用程序(客户端)ID,这将作为代码中的
MicrosoftAppId。 - 生成客户端密码:进入「证书和密码」>「新客户端密码」,设置有效期后生成并复制密码值,这就是
MicrosoftAppPassword(注意该值仅显示一次,需妥善保存)。
- 注册完成后,复制应用程序(客户端)ID,这将作为代码中的
- 配置Teams相关权限(按需):
- 进入「API权限」>「添加权限」>选择「Microsoft Graph」,添加所需的委派权限(如
User.Read),若需要管理员统一授权,点击「授予管理员同意」。
- 进入「API权限」>「添加权限」>选择「Microsoft Graph」,添加所需的委派权限(如
二、代码层面配置
- 更新
appsettings.json:{ "MicrosoftAppId": "你的应用客户端ID", "MicrosoftAppPassword": "你的客户端密码", "AzureAd": { "ClientId": "你的应用客户端ID", "ClientSecret": "你的客户端密码", "Authority": "https://login.microsoftonline.com/common" } } - 配置认证中间件(以C#为例):
在Program.cs中添加认证服务:
同时配置CloudAdapter,确保使用正确的凭据验证请求:builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));var credentialProvider = new ConfigurationCredentialProvider(builder.Configuration); var adapter = new CloudAdapter(credentialProvider); - 实现用户认证流程:
使用OAuthPrompt发起用户登录请求,在对话逻辑中集成:
最后回到Azure应用注册页面,添加重定向URI为var oauthPrompt = new OAuthPrompt( nameof(OAuthPrompt), new OAuthPromptSettings { ConnectionName = "AzureADv2", Text = "请登录以继续操作", Title = "用户登录" });https://你的公网端点/api/messages(本地测试可使用ngrok生成的公网地址),确保认证回调能被机器人接收。
三、本地部署注意事项
- 本地服务需通过ngrok等工具暴露公网地址,Teams需要能访问到机器人的消息端点,同时认证回调也依赖公网地址。
- 确保机器人的
/api/messages端点能正确处理Teams的请求,且认证中间件能验证请求签名(依赖MicrosoftAppId和MicrosoftAppPassword)。 - 若仅需机器人自身身份验证(如调用Teams Graph API),可直接使用客户端ID和密码获取令牌,无需集成
OAuthPrompt。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

