如何从我的MVC应用程序访问OneDrive的业务
本文关键字:访问 OneDrive 业务 应用程序 MVC 我的 | 更新日期: 2023-09-27 18:13:13
我有一个问题与授权服务SharePoint搜索REST API (https://msdn.microsoft.com/en-us/library/office/jj163876.aspx?f=255&MSPPError=-2147217396)。
我们有ASP。. NET MVC应用程序,使用AZURE AD进行身份验证(配置为与我们的应用程序一起工作)。我还订阅了office 365,特别地,我使用OneDrive来存储商务文档。我在AZURE AD中的应用程序配置为与Office 365 SharePoint Online和Windows AZURE Active Directory一起工作。
在授权期间,用户在登录页面login.microsoftonline.com上输入详细信息。如果身份验证成功,AZURE AD将页面返回给用户并返回访问令牌。接下来,我们想使用SharePoint Search REST API在oneDrive上存储的文档中进行文本搜索。使用GET请求类型https://<my_domain>.sharepoint.com/sites/test/_api/search/query?querytext='doc'
返回错误"401 Unauthorized"。当您在请求体中添加从AZURE AD接收的访问令牌时,它不能解决问题,服务器返回错误"403 forbidden"。
示例请求
stringtenantId = ClaimsPrincipal.Current.FindFirst(AppConfiguration.TenantIdClaimType).Value;
AuthenticationContextauthContext = newAuthenticationContext(string.Format(CultureInfo.InvariantCulture, AppConfiguration.LoginUrl, tenantId));
ClientCredentialcredential = newClientCredential(AppConfiguration.AppPrincipalId, AppConfiguration.AppKey);
AuthenticationResultassertionCredential = authContext.AcquireToken(AppConfiguration.GraphUrl, credential);
stringauthHeader = assertionCredential.CreateAuthorizationHeader();
HttpClientclient = newHttpClient();
HttpRequestMessagerequest = newHttpRequestMessage(HttpMethod.Get, "https://<my_domain>.sharepoint.com/sites/test/_api/search/query?querytext='doc'");
request.Headers.TryAddWithoutValidation("Authorization", authHeader);
request.Headers.TryAddWithoutValidation("Accept", "application/json;odata=minimalmetadata");
HttpResponseMessageresponse = awaitclient.SendAsync(request);
也
public static class AppConfiguration
{
public static string TenantIdClaimType
{
get
{
return "http://schemas.microsoft.com/identity/claims/tenantid";
}
}
public static string LoginUrl
{
get
{
return "https://login.windows.net/{0}";
}
}
public static string GraphUrl
{
get
{
return "https://graph.windows.net";
}
}
public static string GraphUserUrl
{
get
{
return "https://graph.windows.net/{0}/users/{1}?api-version=2013-04-05";
}
}
public static string AppPrincipalId
{
get
{
return ConfigurationManager.AppSettings["ida:ClientID"];
}
}
public static string AppKey
{
get
{
return ConfigurationManager.AppSettings["ida:Password"];
}
}
}
据我所知,问题是在访问令牌。但是我没有找到关于如何正确配置这个令牌的任何信息。JavaScript请求不适合我,请求应该从服务器处理。
我想你可以检查两件事。
在Azure AD中需要"应用程序权限"而不是"委托权限"。是您的应用程序的配置方式吗?
根据经验,如果您在使用AccessToken访问office 365中的功能时遇到困难,有时是因为您需要更安全的令牌。看看需要"ClientAssertionCertificate"类的AcquireToken重载。您必须在Azure AD清单中手动配置它。查看此参考(关于"为您的应用程序配置X.509公共证书"的部分):https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in-office-365
这有帮助吗?