You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:40:41