基于Node.js的Teams Bot当前用户认证及AccessToken获取求助
Node.js Teams Bot 用户身份认证与AccessToken获取方案
一、AAD应用配置
- 给Teams Bot对应的AAD注册应用添加委派权限,权限范围需与目标Web API暴露的权限一致(例如
api://<Web-API-Client-ID>/access_as_user),必要时完成管理员同意操作。 - 在Azure Portal的Bot资源配置页,添加OAuth连接设置:
- 自定义连接名称(如
AADAuth) - 服务提供商选择Azure Active Directory v2
- 填写Bot的AAD应用ID、租户ID,权限范围填入之前定义的Web API权限,其余参数保持默认。
- 自定义连接名称(如
二、Bot代码集成认证流程
使用botbuilder库的OAuthPrompt组件发起认证请求:
const { ConversationState, MemoryStorage, OAuthPrompt, DialogSet, DialogTurnStatus } = require('botbuilder'); // 初始化对话状态与存储 const memoryStorage = new MemoryStorage(); const conversationState = new ConversationState(memoryStorage); const dialogState = conversationState.createProperty('dialogState'); const dialogs = new DialogSet(dialogState); // 配置OAuthPrompt,关联已创建的连接 dialogs.add(new OAuthPrompt('OAuthPrompt', { connectionName: 'AADAuth', text: '请完成身份认证以继续操作', title: '身份认证', timeout: 300000 // 5分钟超时 })); // 处理用户消息的核心逻辑 async function onTurn(turnContext) { if (turnContext.activity.type === 'message') { const dc = await dialogs.createContext(turnContext); const results = await dc.continueDialog(); // 无活跃对话时启动认证流程 if (results.status === DialogTurnStatus.empty) { await dc.beginDialog('OAuthPrompt'); } else if (results.status === DialogTurnStatus.complete) { // 认证完成后获取AccessToken const tokenResponse = results.result; if (tokenResponse) { await callTargetWebApi(tokenResponse.token); await turnContext.sendActivity('认证成功,已获取Web API访问权限'); } else { await turnContext.sendActivity('认证失败,请重试'); } } await conversationState.saveChanges(turnContext); } } // 调用目标Web API的示例函数 async function callTargetWebApi(accessToken) { const response = await fetch('https://your-web-api-domain/api/target-resource', { headers: { 'Authorization': `Bearer ${accessToken}` } }); const apiData = await response.json(); // 根据业务需求处理API返回数据 }
三、关键注意事项
- 确保Teams用户已登录与Web API同租户的AAD账号,否则认证流程会失败。
- Web API的AAD应用需正确暴露API权限,并将Bot的AAD应用添加为授权客户端。
- 处理Token过期:可通过
UserTokenClient.refreshToken()方法刷新过期的AccessToken,避免重复发起认证流程。
内容的提问来源于stack exchange,提问作者sr45
相关产品推荐
相关产品推荐

