我正在跟踪位于https://nickvandenheuvel.eu/tag/adal-js/的示例代码,但是我的代码由于SharePoint连接失败而出现ADAL错误AADSTS500011。
错误消息指出“资源主体名为 在名为的租户中找不到https://my.sharepoint.com/sites/mysite mytenant.onmicrosoft.com。如果租户的管理员未安装该应用程序,或者该租户中的任何用户未同意该应用程序,则可能会发生这种情况。您可能已将身份验证请求发送给错误的租户。”
我的代码与文章完全相同。我的想法可能是我的SharePoint网站的Azure注册可能需要做些事情,或者代码与Office 365和SharePoint现在的工作方式已经过时了。
// Assign variables
var variables = {
// Domain of Azure AD tenant
azureAD: "tenantname.onmicrosoft.com",
// ClientId of Azure AD application principal
clientId: "11111111-1111-1111-1111-111111111111",
// GUID of SharePoint list
listId: "22222222-2222-2222-2222-222222222222",
// Name of SharePoint tenant
sharePointTenant: "tenantname"
}
// Create config and get AuthenticationContext
window.config = {
tenant: variables.azureAD,
clientId: variables.clientId,
postLogoutRedirectUri: window.location.origin,
endpoints: {
graphApiUri: "https://graph.microsoft.com",
sharePointUri: "https://" + variables.sharePointTenant + ".sharepoint.com",
},
cacheLocation: "localStorage"
};
var authContext = new AuthenticationContext(config);
var user = authContext.getCachedUser();
if (!user) {
authContext.login();
}
// Get OneDrive documents of current user with AuthenticationContext of Graph API
authContext.acquireToken(config.endpoints.graphApiUri, function (error, token) {
if (error || !token) {
console.log("ADAL error occurred: " + error);
return;
}
else {
var filesUri = config.endpoints.graphApiUri + "/v1.0/me/drive/root/children";
$.ajax({
type: "GET",
url: filesUri,
headers: {
"Authorization": "Bearer " + token
}
}).done(function (response) {
console.log("Successfully fetched files from OneDrive.");
var items = response.value;
for (var i = 0; i < items.length; i++){
console.log(items[i].name);
$("#OneDrive").append("<li>" + items[i].name + "</li>");
}
}).fail(function () {
console.log("Fetching files from OneDrive failed.");
});
}
});
// Get SharePoint documents of list with AuthenticationContext of SharePoint
authContext.acquireToken(config.endpoints.sharePointUri, function (error, token) {
if (error || !token) {
console.log("ADAL error occurred: " + error);
return;
}
else {
var listUri = config.endpoints.sharePointUri + "/_api/web/lists('" + variables.listId + "')/items?$select=Title";
$.ajax({
type: "GET",
url: listUri,
headers: {
"Authorization": "Bearer " + token,
"accept": "application/json;odata=verbose"
}
}).done(function (response) {
console.log("Successfully fetched list from SharePoint.");
var items = response.d.results;
for (var i = 0; i < items.length; i++){
console.log(items[i].Title);
$("#SharePoint").append("<li>" + items[i].Title + "</li>");
}
}).fail(function () {
console.log("Fetching list from SharePoint failed.");
});
}
});
我可以说该代码确实适用于其余的API和OneDrive。它还可用于从Azure AD获取用户信息。仅当我尝试与SharePoint网站进行交互时,才会出现错误消息。我不确定代码是否与ADAL与SharePoint的交互方式是否最新,或者Azure AD中是否需要配置某些内容。由于与OneDrive的交互似乎有效,因此我认为不是Azure AD的问题(因为我不记得必须在Azure AD中为OneDrive进行任何设置)。
答案 0 :(得分:0)
错误:AADSTS500011
表示您的资源名称错误。或不存在(表示您的管理员尚未同意)
即在您的租户的SP列表中找不到https://my.sharepoint.com/sites/mysite。请注意,资源名称是应用程序注册的应用程序ID URI或SP名称。
确保您已获得管理员同意,并再次检查Sharepoint URL是否正确。
在您提供的链接的第一段中:
第一件事
确保您的Office 365租户与 您的Azure AD租户。当您的租户关联时,您需要 登录到Azure管理门户并注册您的应用程序 Azure AD租户中的负责人。下一步是启用OAuth 2个隐式授予您的应用程序主体。确保 应用程序主体至少具有“读取用户文件”和“读取项目” Office 365 SharePoint Online的所有网站集权限 应用。
下面的Git链接的自述文件说明了如何正确创建AAD应用程序注册(旧版)并授予同意并根据文章启用隐式流程:
https://github.com/Azure-Samples/active-directory-javascript-singlepageapp-dotnet-webapi
此链接说明了如何使用v2.0端点执行隐式流:
https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow
尽管对于v2.0终结点,您仍需要使用MSAL.JS作为身份验证库。
基本上,您需要做的是使用带有您的Sharepoint URL的App ID URI创建一个AAD应用程序注册,然后根据文章为其授予权限:
至少读取用户文件并读取所有网站集中的项目 Office 365 SharePoint Online应用程序的权限
但是,我想指出的是,这篇文章已经很老了,很多链接都无法正常工作。它所指的大多数资源已过时或不受支持。
请参阅有关如何正确连接到SharePoint以正确实施SharePoint解决方案的官方文档。
https://docs.microsoft.com/en-us/sharepoint/dev/
https://docs.microsoft.com/en-us/sharepoint/dev/spfx/connect-to-sharepoint
https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-msgraph
https://docs.microsoft.com/en-us/sharepoint/dev/spfx/connect-to-anonymous-apis