Heyo,
我正在尝试构建带有个人标签的多租户团队应用。目标是:对用户进行身份验证(像解释的in the Microsoft example一样,在Azure存储中托管带有JavaScript代码的静态html页面),然后调用我的自定义Web服务并使用SharePoint-Online URL进行回答,包含一个SPFX Webpart。然后,用户被重定向到该页面。当用户没有注册时,他得到一个错误页面。这里的问题是,我无法将用户重定向到该SharePoint页面。 “团队”选项卡的iframe中不会打开“ SharePoint”页面,因为该选项卡的域是托管我的静态网页的域。所以我的第一个问题是如何实现? (我在构建时不知道SharePoint URL,也不知道用户是否有页面。这是在运行时在自定义Web服务中确定的)
另一种方法是构建一个自定义JavaScript应用程序(作为响应,就像我的SPFX Webpart一样),将其托管在我的静态网页上,然后从那里与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.AudienceUriValidationFailedException类型的异常”错误。
这是某种CORS问题,还是SharePoint需要其他类型的令牌?还是我必须使用完全不同的JavaScript库与SharePoint进行身份验证。