从客户端应用程序访问 Sharepoint Online
Access to Sharepoint Online from Client App
最近我遇到了一个问题,我有一个需要连接到 SharePoint Online 的 .NET Web API。在 Azure AD 中,我已向 AppId“AllSites.Manage.All”、AllSites.Read.All 等提供所有权限。我使用 CSOM 库将令牌传递到共享点。但是一旦我尝试对收到的 clientcontext 执行查询,它就会抛出 401 UnAuthorized 错误
private async Task<ClientContext> GetClientContextWithAccessToken1(string targetUrl)
{
var accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new string[] {"Files.ReadWrite.All", "Sites.Manage.All", "AllSites.Read"});
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await httpClient.GetAsync($"https://graph.microsoft.com/beta/me");
if(response.StatusCode == HttpStatusCode.OK)
{
var content = await response.Content.ReadAsStringAsync();
}
using(ClientContext clientContext = new ClientContext(targetUrl))
{
clientContext.ExecutingWebRequest +=
delegate (object oSender, WebRequestEventArgs webRequestEventArgs)
{
webRequestEventArgs.WebRequestExecutor.RequestHeaders["Authorization"] =
"Bearer " + accessToken;
};
return clientContext;
}
}
对于查询 https://graph.microsoft.com/beta/me 的请求,需要以下权限之一才能获得管理员的同意。像 Directory.Read.All , User.Read.All ...
此外,请确保在您注册的 AAD 应用程序中添加 Sites.Read.All
或 Sites.ReadWrite.All
应用程序权限,并在获得访问共享点网站的令牌之前获得管理员同意。
如果您使用的是 v2 端点,请在您的互联网浏览器中转至下方 URL 以进行管理员授权:
https://login.microsoftonline.com/{yourtenant}/adminconsent?client_id={ applicationid /clientId }&state=123&redirect_uri={redirect uri of your app}
并使用全局管理员帐户登录并接受此权限。
如果您正在调用 Microsoft Graph API 端点,您应该避免使用 csom。
AllSites.Manage.All
、AllSites.Read.All
等权限与 SharePoint 和 CSOM 相关,它们不适用于 Graph API 端点。
对于 Graph API 你需要根据你的情况获得不同的 token or better option is to use Microsoft Graph Client Library for .NET。
最近我遇到了一个问题,我有一个需要连接到 SharePoint Online 的 .NET Web API。在 Azure AD 中,我已向 AppId“AllSites.Manage.All”、AllSites.Read.All 等提供所有权限。我使用 CSOM 库将令牌传递到共享点。但是一旦我尝试对收到的 clientcontext 执行查询,它就会抛出 401 UnAuthorized 错误
private async Task<ClientContext> GetClientContextWithAccessToken1(string targetUrl)
{
var accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new string[] {"Files.ReadWrite.All", "Sites.Manage.All", "AllSites.Read"});
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await httpClient.GetAsync($"https://graph.microsoft.com/beta/me");
if(response.StatusCode == HttpStatusCode.OK)
{
var content = await response.Content.ReadAsStringAsync();
}
using(ClientContext clientContext = new ClientContext(targetUrl))
{
clientContext.ExecutingWebRequest +=
delegate (object oSender, WebRequestEventArgs webRequestEventArgs)
{
webRequestEventArgs.WebRequestExecutor.RequestHeaders["Authorization"] =
"Bearer " + accessToken;
};
return clientContext;
}
}
对于查询 https://graph.microsoft.com/beta/me 的请求,需要以下权限之一才能获得管理员的同意。像 Directory.Read.All , User.Read.All ...
此外,请确保在您注册的 AAD 应用程序中添加 Sites.Read.All
或 Sites.ReadWrite.All
应用程序权限,并在获得访问共享点网站的令牌之前获得管理员同意。
如果您使用的是 v2 端点,请在您的互联网浏览器中转至下方 URL 以进行管理员授权:
https://login.microsoftonline.com/{yourtenant}/adminconsent?client_id={ applicationid /clientId }&state=123&redirect_uri={redirect uri of your app}
并使用全局管理员帐户登录并接受此权限。
如果您正在调用 Microsoft Graph API 端点,您应该避免使用 csom。
AllSites.Manage.All
、AllSites.Read.All
等权限与 SharePoint 和 CSOM 相关,它们不适用于 Graph API 端点。
对于 Graph API 你需要根据你的情况获得不同的 token or better option is to use Microsoft Graph Client Library for .NET。