我有一个使用vscode中的团队工具包创建的团队应用程序,我现在正在工作。
我还在应用程序中添加了一个Azure功能。我可以在本地调试中调用该函数。但是,当我尝试调用函数后,它已部署到Azure,我得到这个错误:
访问令牌验证失败:客户端id 5e3ce6c0-2b1f-4285-8d4b-75ee78787346未被授权调用此http触发器
我按照本指南将AAD应用程序设置为多租户应用程序https://github.com/OfficeDev/TeamsFx/wiki/Multi-tenancy-Support-for-Azure-AD-app
我的fetch调用在我的代码中是这样的
const teamsfx = new TeamsFx();
const accessToken = await teamsfx.getCredential().getToken("");
const response = await fetch(
`${process.env.REACT_APP_FUNC_ENDPOINT}/api/POST_request_to_db`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken?.token || ""}`,
},
body: JSON.stringify(requestInfo),
}
)
.then((response) => response.json())
.then((data) => {
console.log("Success:", data);
})
.catch((error) => {
console.error("Error:", error);
});
}
应用程序是基于SSO选项卡模板构建的。
我不确定在AAD应用程序或令牌中是否有问题?我试图运行teamsFX作为IdentityType应用程序和用户。
我根据Bowen写的内容设法解决了这个问题。问题出在二头肌代码上。当函数被部署时它没有得到函数配置。之后添加到二头肌循环一切都很好!
我也遇到过类似的问题,结果与访问权限有关,但不是以人们可能期望的方式。
即使我是所讨论的团队频道的所有者,使用"Full"控件,一个简单的GET会引起问题。
首先,确保访问令牌是针对正确的站点。它可以是空白的。例如:
.getToken(`https://yourcompany.sharepoint.com/.default`);
第二,返回的并不是实际的令牌本身。实际的令牌是返回的访问令牌承诺的属性。例如:
accessTokenPromise = teamsUserCredential?.getToken(`https://loringengineers.sharepoint.com/.default`);
ActualToken = accessTokenPromise.token
好吧,这些都是让我绊倒的事情。