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

Teams消息扩展:为自定义Web服务调用添加Authorization请求头

为Teams消息扩展的自定义Web服务调用添加Authorization请求头

Teams的TaskModuleTaskInfo类中确实没有直接配置请求头的属性,不过可以通过以下两种方式实现需求:

方法1:在Task Module前端页面中主动添加请求头

当Task Module加载你的HTML页面后,在页面的JS代码里发起API请求时,手动带上Authorization头。示例代码如下:

// 页面加载后获取授权令牌(可通过Teams SDK或后端接口获取)
const authToken = await getYourAuthToken();
// 发起请求时添加Authorization头
fetch('https://your-api-endpoint.com/data', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${authToken}`
  }
})
.then(response => response.json())
.then(data => console.log(data));

如果需要从Bot端传递令牌到前端,可以在返回TaskModuleTaskInfo时,将令牌作为加密后的查询参数拼在Url中:

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
    // 从Bot上下文获取用户OAuth令牌(需提前配置OAuth连接)
    var tokenResponse = await turnContext.Adapter.GetUserTokenAsync(turnContext, "YourOAuthConnectionName", null, cancellationToken);
    var encodedToken = System.Web.HttpUtility.UrlEncode(tokenResponse.Token);
    
    return new MessagingExtensionActionResponse
    {
        Task = new TaskModuleContinueResponse
        {
            Value = new TaskModuleTaskInfo
            {
                Height = 200,
                Width = 400,
                Title = "Task Module HTML Page",
                Url = $"https://myserver.com/htmlpage.html?token={encodedToken}",
            },
        },
    };
}

之后前端页面从URL参数中提取令牌,添加到请求头即可。

方法2:通过Bot后端代理请求

让Bot作为中间层,先由Bot调用你的Web服务并添加Authorization头,再将结果返回给Task Module。这种方式无需前端处理令牌,安全性更高:

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
    // 获取用户OAuth令牌
    var tokenResponse = await turnContext.Adapter.GetUserTokenAsync(turnContext, "YourOAuthConnectionName", null, cancellationToken);
    
    // 调用自定义Web服务并添加Authorization头
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", tokenResponse.Token);
        var response = await client.GetAsync("https://your-api-endpoint.com/data", cancellationToken);
        var data = await response.Content.ReadAsStringAsync();
        
        // 构造Task Module内容,直接展示返回数据或传递给前端页面
        return new MessagingExtensionActionResponse
        {
            Task = new TaskModuleContinueResponse
            {
                Value = new TaskModuleTaskInfo
                {
                    Height = 200,
                    Width = 400,
                    Title = "Task Module Data",
                    Html = $"<div>{data}</div>",
                },
            },
        };
    }
}

注意事项

  • 使用SSO令牌时,需在Azure AD中配置Bot的OAuth连接,确保令牌具备访问目标Web服务的权限。
  • 避免直接在URL中传递未加密的敏感令牌,防止数据泄露。

内容的提问来源于stack exchange,提问作者Anne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:27:36