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

SharePoint WebPart无法从Teams获取授权令牌问题求助

Teams标签页应用调用getAuthToken权限错误解决

问题详情

开发的Teams标签页应用(托管在SharePoint域名下,已部署)在获取访问令牌时触发报错:

chunk.spfx-core-teamsenv-teamsJs-v2_none_6e125c783faf9954e07e.js:1 Uncaught (in promise) Error: App does not have the required permissions for this operation

相关代码

令牌获取组件代码:

import { WebPartContext } from "@microsoft/sp-webpart-base";
import { ITokenIssuer } from "../../interfaces/tokenIssuer/ITokenIssuer";

class TeamsTokenIssuer implements ITokenIssuer {
    constructor(context:WebPartContext) {
        this.initializeMicrosoftTeamsApp(context);
    }

    private initializeMicrosoftTeamsApp = async (context:WebPartContext) => {
        console.log("initialize teams app");
        console.log(context);
        await context.sdks.microsoftTeams?.teamsJs.app.initialize();
    }

    async getAccessToken(context: WebPartContext): Promise<string> {
        // 冗余代码:此处多余的microsoftTeams变量建议移除
        console.log("user",await context.sdks.microsoftTeams?.teamsJs.authentication.getUser());
        let accessToken: string | undefined = "";
        try {
            accessToken = await context.sdks.microsoftTeams?.teamsJs.authentication.getAuthToken();
        } catch(e) {
            console.log(e);
        }
        if(!accessToken) return "";
        return accessToken;
    }
}

export default TeamsTokenIssuer;

当前权限配置

  • Microsoft Graph权限:email、openid、offline_access、profile、user.read
  • Teams应用manifest.json权限:
"permissions": [
    "identity",
    "messageTeamMembers"
],

问题原因

报错核心是Teams应用未正确声明获取Microsoft Graph访问令牌所需的权限范围:

  1. getAuthToken()默认请求Microsoft Graph令牌,但当前manifest仅配置了identity权限(仅支持基础身份信息获取,无法获取Graph令牌)
  2. 缺少webApplicationInfo节点来关联Azure AD应用并声明对应的Graph权限范围

解决方案

1. 更新Teams应用manifest.json

新增或完善webApplicationInfo节点,关联你的Azure AD应用并声明所需的委托权限:

"webApplicationInfo": {
    "id": "<你的Azure AD应用客户端ID>",
    "resource": "https://graph.microsoft.com",
    "delegatedPermissions": [
        "User.Read",
        "email",
        "openid",
        "profile"
    ]
},
"permissions": [
    "identity",
    "messageTeamMembers"
]

注意:id必须填写你在Azure AD中注册的应用客户端ID,且该应用已配置对应Microsoft Graph委托权限。

2. 明确指定令牌资源(可选)

调用getAuthToken时显式指定资源,避免默认权限匹配问题:

accessToken = await context.sdks.microsoftTeams?.teamsJs.authentication.getAuthToken({
    resources: ["https://graph.microsoft.com"]
});

3. 确认Azure AD应用权限已授权

  • 如果是租户级应用,确保管理员已对Azure AD应用的User.Read等委托权限授予同意
  • 用户首次使用应用时,会触发授权流程,需完成授权

4. 修复代码冗余

移除getAccessToken方法中多余的microsoftTeams变量,避免潜在语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:55:29