【问题标题】:Teams Icon in Microsoft Teams Configurable TabMicrosoft Teams 可配置选项卡中的 Teams 图标
【发布时间】: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


【解决方案1】:

您必须注册您的应用才能使用图形 API。应用安装在不同租户上绝对没有问题,您只需在注册应用时选择“多租户”选项即可启用此场景。

据我了解,徽标图片/图标被视为公司数据,因此您需要用户同意才能获取。因此,需要注册应用,并且用户(或用户管理员)必须同意在添加应用时授予应用访问团队信息的权限。

【讨论】:

  • 我已经通过不同的身份提供者进行身份验证。有什么方法我不需要要求用户再次登录来获取 Graph 的访问令牌?我在我的问题中添加了一个代码,但这给了我错误。见原帖。
  • 完全可以在团队中使用单点登录 (SSO)。即使是管理员同意,您也必须注册您的应用程序。注册时,您需要说明您的应用需要团队资料(图标)。然后,当管理员同意时,他将同意这一点而不是登录。阅读有关 SSO 的更多信息:docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/…。第二步,实现代流。请查看以上链接中的文章。但这一切都可以 100% 工作,无需用户显式登录。
  • 我阅读了这个文档,但它最后说:非 AAD 身份验证上述身份验证解决方案仅适用于支持 AAD 作为身份提供者的应用和服务。想要使用基于非 AAD 的服务进行身份验证的应用程序必须继续使用基于弹出式的 Web 身份验证流程。
  • 是的,这是正确的。在您的情况下(如果使用此架构),用户将经过两次身份验证 - 第一次在您的应用程序中使用您的自定义身份验证,第二次在团队和天蓝色广告中使用单点登录。但既然第二次认证是无声的,他应该不会注意到。一般来说,如果您正在为团队开发应用程序,那么自定义身份验证没有多大意义,因为所有用户都已通过团队身份验证。
  • 所以如果我理解正确,在这种情况下我需要调用两次身份验证:``` function HandleLogin(){ //Non AAD microsoftTeams.authentication.authenticate({ url: window.location.origin + /auth-start.html?loginUrl=${auth.getLoginUrl()}&ClientId=${auth.clientId}&RedURi=${auth.redirectUri},successCallback:函数(结果){ .... },failureCallback:函数(原因){ } }); //这里是 AD 的静默身份验证 microsoftTeams.authentication.authenticate({.................}) } ``
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多