如何通过AAD获取调用SharePoint REST API所需的Access Token?
.NET Core 调用SPO REST API 获取Access Token操作方案
1. 配置应用注册权限
你已经完成了应用注册,首先需要补充SPO的权限配置:
- 进入Azure Portal应用注册页,找到你已登记的应用
- 选择「API权限」→「添加权限」→「SharePoint」
- 根据业务场景选择委托权限或者应用程序权限:
- 委托权限:应用需要以登录用户身份调用接口时选择,按需勾选
Sites.Read.All、Sites.ReadWrite.All等对应权限 - 应用程序权限:应用作为无用户的后台守护程序调用时选择,按需勾选对应权限,配置完成后需要点击「授予管理员同意」完成权限激活
- 委托权限:应用需要以登录用户身份调用接口时选择,按需勾选
2. 安装依赖包
项目需要安装Microsoft.Identity.Client身份验证库,NuGet安装命令:
Install-Package Microsoft.Identity.Client
3. 代码获取Access Token
场景1:委托权限(有登录用户场景)
以用户名密码流为例,代码示例:
using Microsoft.Identity.Client; // 替换为你的实际配置 var clientId = "应用注册的客户端ID"; var tenantId = "租户ID"; var username = "登录用户的UPN地址"; var password = "登录用户密码"; // SPO资源范围格式为https://<租户域名>.sharepoint.com/.default var scopes = new[] { "https://contoso.sharepoint.com/.default" }; var publicClient = PublicClientApplicationBuilder .Create(clientId) .WithTenantId(tenantId) .Build(); var tokenResult = await publicClient.AcquireTokenByUsernamePassword(scopes, username, password) .ExecuteAsync(); string accessToken = tokenResult.AccessToken;
场景2:应用程序权限(无用户后台场景)
使用客户端凭据流获取Token,代码示例:
using Microsoft.Identity.Client; // 替换为你的实际配置 var clientId = "应用注册的客户端ID"; var tenantId = "租户ID"; var clientSecret = "应用注册中生成的客户端密钥"; var scopes = new[] { "https://contoso.sharepoint.com/.default" }; var confidentialClient = ConfidentialClientApplicationBuilder .Create(clientId) .WithClientSecret(clientSecret) .WithTenantId(tenantId) .Build(); var tokenResult = await confidentialClient.AcquireTokenForClient(scopes) .ExecuteAsync(); string accessToken = tokenResult.AccessToken;
4. 调用SPO REST接口
拿到Token后在请求头携带即可调用目标接口,示例:
using var httpClient = new HttpClient(); // 携带身份凭证 httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken); // 配置SPO要求的返回格式头 httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json;odata=verbose")); // 替换为你的实际查询地址 var requestUrl = "https://contoso.sharepoint.com/sites/shipment/_api/search/query?querytext='你的查询内容'"; var response = await httpClient.GetAsync(requestUrl); var responseContent = await response.Content.ReadAsStringAsync();
提示:如果你使用的是世纪互联运营的中国区SharePoint,需要将资源域名、租户端点替换为中国区对应地址。
内容的提问来源于stack exchange,提问作者Just J
相关产品推荐
相关产品推荐

