【发布时间】:2022-01-06 08:27:37
【问题描述】:
我正在构建一个团队应用程序,该应用程序使用基于非 AAD 的服务进行身份验证。我想在我的可配置选项卡中获取团队图标。我有什么选择?我无法注册应用程序,因为 Teams 应用程序将部署在不同的租户上。我可以在不注册应用程序但代表用户的情况下将 microsoftTeams.authentication.getAuthToken 用于图形 api(/teams/${teamsid}/photo/$value) 吗?或者有没有更简单的方法来获取团队图标。
const authTokenRequest: microsoftTeams.authentication.AuthTokenRequest = {
successCallback: function (token: string) {
//const decoded: { [key: string]: any; } = jwt.decode(token);
//localStorage.setItem("name", decoded.name);
localStorage.setItem("token", token);
const response = await axios.get(apiConfig.endpoint + "/api/" + functionName, {
headers: {
authorization: "Bearer " + accessToken?.token || "",
},
});
return response.data;
},
failureCallback: function (error: any) {
console.log("Failure on getAuthToken: " + error);
}
};
microsoftTeams.initialize(() => {
microsoftTeams.getContext((r) => {
microsoftTeams.authentication.getAuthToken(authTokenRequest);
});
});
通过这个我得到以下错误: 尝试处理身份验证响应:错误:invalid_resource|AADSTS500011:在名为 xxxx 的租户中找不到名为 api://xxxxx/botid-xxxx 的资源主体。如果租户管理员未安装应用程序或未获得租户中任何用户的同意,则可能会发生这种情况。您可能将身份验证请求发送给了错误的租户。资源:api://xxxxx/botid-xxxx,错误映射到操作:resourceDisabled
【问题讨论】:
-
您能否确认以下答案是否解决了您的问题?
-
@Meghana-MSFT,不,我已经有了身份提供者。在 AD 上注册一个 App 并通过用户再次请求凭证是不理想的。是否有任何静默身份验证在给予管理员同意后采用当前用户身份验证?我在 Teams 应用程序目录上上传了我的包,它也获得了管理员的同意。但我得到了上述错误。
-
管理员同意调用图形API来获取图标。从它的外观来看,您甚至没有请求图形 API 访问(它在您的应用程序注册中)。您不能使用从团队获得的令牌调用图形 API。您需要使用代表流程将此令牌交易到另一个访问令牌。检查下面的链接。
-
是的,我首先尝试获取访问令牌。一旦我的代码点击 getAuthToken,我就会看到一个弹出同意屏幕,当我点击继续时,我看到了上面的错误。我有一些想法,我可以在哪里改进我的解决方案。我会试试看,会在这里更新。
-
为此,您需要注册您的应用程序。在天蓝色的广告中。 AFAIK 没有其他方法。
标签: microsoft-graph-api microsoft-teams teams-toolkit