C# 访问sharepoint搜索rest api
我有个问题。我使用Azure AD验证我的asp.net应用程序。身份验证工作正常。然后,我从该应用程序尝试使用sharepoint search rest api访问OneDrive for Business。但是服务器总是收到带有401错误的响应。我知道问题在于我使用的访问令牌(现在我使用从Azure AD接收的令牌)。但我从未找到如何为sharepoint search rest api获取访问令牌的常规描述 提前感谢回答 您需要授予ASP.NET应用程序使用OneDrive for Business应用程序的权限 下面是如何使用Azure管理门户进行此操作的概述。(请注意,您的OneDrive for Business帐户是一种Office 365 SharePoint Online帐户。) 转到manage.windowsazure.com>Active Directory>您的租户。如果您的租户具有关联的OneDrive for Business帐户,则其应用程序列表将包括Office 365 SharePoint Online。 如果租户的应用程序列表中确实包含Office 365 SharePoint Online,则下一步是授予ASP.NET Web应用程序访问它的权限 在Azure Active Directory区域中打开Web应用程序的页面。然后选择配置>添加应用程序。添加Office 365 SharePoint Online应用程序。授予它所有必要的权限并保存 下面的屏幕截图是针对本机客户端应用程序的,因为我的演示代码正在使用本机客户端应用程序。您可以对Web应用程序执行类似的操作,不过您需要使用X509证书进行身份验证,而不是用户名/密码C# 访问sharepoint搜索rest api,c#,asp.net,azure,sharepoint,C#,Asp.net,Azure,Sharepoint,我有个问题。我使用Azure AD验证我的asp.net应用程序。身份验证工作正常。然后,我从该应用程序尝试使用sharepoint search rest api访问OneDrive for Business。但是服务器总是收到带有401错误的响应。我知道问题在于我使用的访问令牌(现在我使用从Azure AD接收的令牌)。但我从未找到如何为sharepoint search rest api获取访问令牌的常规描述 提前感谢回答 您需要授予ASP.NET应用程序使用OneDrive for Bu
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Net;
namespace AAD_SharePointOnlineApp
{
class Program
{
static void Main(string[] args)
{
var authContext =
new AuthenticationContext(Constants.AUTHORITY);
var userCredential =
new UserCredential(Constants.USER_NAME, Constants.USER_PASSWORD);
var result = authContext
.AcquireTokenAsync(Constants.RESOURCE, Constants.CLIENT_ID_NATIVE, userCredential)
.Result;
var token = result.AccessToken;
var url = "https://mvp0.sharepoint.com/_api/search/query?querytext=%27timesheets%27";
var request = WebRequest.Create(url);
request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);
var response = request.GetResponse() as HttpWebResponse;
}
}
class Constants
{
public const string AUTHORITY =
"https://login.microsoftonline.com/mvp0.onmicrosoft.com/";
public const string RESOURCE =
"https://mvp0.sharepoint.com";
public const string CLIENT_ID_NATIVE =
"xxxxx-xxxx-xxxxx-xxxx-xxxxx-xxxx";
public const string USER_NAME =
"MY_USER@mvp0.onmicrosoft.com";
public const string USER_PASSWORD =
"MY_PASSWORD";
}
}
您的访问令牌现在将与您的Office 365 for Business帐户一起使用。万岁
演示
下面是一些在我的机器上使用本机客户端应用程序的示例代码。您可以对Web应用程序执行相同的操作,不过您需要使用X509证书而不是用户名/密码
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Net;
namespace AAD_SharePointOnlineApp
{
class Program
{
static void Main(string[] args)
{
var authContext =
new AuthenticationContext(Constants.AUTHORITY);
var userCredential =
new UserCredential(Constants.USER_NAME, Constants.USER_PASSWORD);
var result = authContext
.AcquireTokenAsync(Constants.RESOURCE, Constants.CLIENT_ID_NATIVE, userCredential)
.Result;
var token = result.AccessToken;
var url = "https://mvp0.sharepoint.com/_api/search/query?querytext=%27timesheets%27";
var request = WebRequest.Create(url);
request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);
var response = request.GetResponse() as HttpWebResponse;
}
}
class Constants
{
public const string AUTHORITY =
"https://login.microsoftonline.com/mvp0.onmicrosoft.com/";
public const string RESOURCE =
"https://mvp0.sharepoint.com";
public const string CLIENT_ID_NATIVE =
"xxxxx-xxxx-xxxxx-xxxx-xxxxx-xxxx";
public const string USER_NAME =
"MY_USER@mvp0.onmicrosoft.com";
public const string USER_PASSWORD =
"MY_PASSWORD";
}
}
评论
如果试图使用Web应用程序而不是本机客户端应用程序执行上述操作,则需要使用X509证书,否则将收到以下错误
不支持的仅应用程序令牌
另见: