Azure active directory 动态SharePoint页面/身份验证问题的团队选项卡

Azure active directory 动态SharePoint页面/身份验证问题的团队选项卡,azure-active-directory,sharepoint-online,microsoft-teams,Azure Active Directory,Sharepoint Online,Microsoft Teams,嗨 我正在尝试构建一个带有个人标签的多租户团队应用程序。目标是:对用户进行身份验证(如所解释的那样,一个带有JavaScript代码的静态html页面被托管在Azure存储中),然后调用我的自定义web服务,并使用包含SPFX web部件的SharePoint Online URL进行应答。然后用户被重定向到该页面。当用户未注册时,他会得到一个错误页面。这里的问题是,我无法将用户重定向到该SharePoint页面。SharePoint页面不会在“团队”选项卡的iframe中打开,因为该选项卡的域

我正在尝试构建一个带有个人标签的多租户团队应用程序。目标是:对用户进行身份验证(如所解释的那样,一个带有JavaScript代码的静态html页面被托管在Azure存储中),然后调用我的自定义web服务,并使用包含SPFX web部件的SharePoint Online URL进行应答。然后用户被重定向到该页面。当用户未注册时,他会得到一个错误页面。这里的问题是,我无法将用户重定向到该SharePoint页面。SharePoint页面不会在“团队”选项卡的iframe中打开,因为该选项卡的域是承载静态网页的域。所以我的第一个问题是,我如何才能做到这一点?(我不知道生成时的SharePoint URL,也不知道用户是否有页面。这是在运行时在自定义web服务中确定的)

另一种方法是构建一个定制JavaScript应用程序(在react中,比如我的SPFXWebPart),将其托管在我的静态网页上,然后从那个里和SharePoint通信。为了测试我的想法,我在Azure AD应用程序中添加了SharePoint的权限,使用获得的令牌编写了一个简单的SharePoint调用

var req = new XMLHttpRequest();
req.open("GET", "https://[tenant].sharepoint.com/sites/[sitecollection]/_api/web/lists", false);
req.setRequestHeader("Authorization", "Bearer " + idToken);
req.setRequestHeader("Accept", "application/json;odata=verbose");
req.onreadystatechange = function () {
      if (req.readyState == 4 && req.status == 200) {
          var result = JSON.parse(req.responseText);
      }
};
req.send();
问题是我的SharePoint正在回答401,并且响应中出现了“类型为Microsoft.IdentityModel.Tokens.AudienceEurivalidationFailedException的异常”错误


这是某种CORS问题还是SharePoint需要其他类型的令牌?或者我必须使用完全不同的JavaScript库对SharePoint进行身份验证。

您是否在请求正文中发送以下参数[客户端ID、客户端密码和资源]?不,我只是使用我获得的令牌。我没有秘密,因为我不想用JavaScript处理交换。我想要一个安静的登录,就像它可能与图形,例如与azure广告应用程序。我的意思是-在azure广告中,我可以选择SharePoint并设置权限…如果无法将权限与令牌一起使用,在SharePoint应用程序中授予权限有什么意义?