C# Sharepoint-ADAL OAuth-文件不存在
我正在创建使用sharepoint REST API的演示应用程序。我能够成功地检索到承载令牌(通过客户端ID和证书)。应用程序已在Azure AD中注册,并且已检查其中的所有Sharepoint权限。例如,我可以检索所有列表,但无法检索文件。相同的查询在浏览器中工作。我想这是许可问题。我必须在SP中注册此应用吗<代码>https://tenant.sharepoint.com/IT/_layouts/15/appinv.aspx我尝试了,但没有成功,但我认为Azure广告中的权限应该足够了。我的GET查询返回C# Sharepoint-ADAL OAuth-文件不存在,c#,azure,sharepoint,oauth-2.0,adal,C#,Azure,Sharepoint,Oauth 2.0,Adal,我正在创建使用sharepoint REST API的演示应用程序。我能够成功地检索到承载令牌(通过客户端ID和证书)。应用程序已在Azure AD中注册,并且已检查其中的所有Sharepoint权限。例如,我可以检索所有列表,但无法检索文件。相同的查询在浏览器中工作。我想这是许可问题。我必须在SP中注册此应用吗https://tenant.sharepoint.com/IT/_layouts/15/appinv.aspx我尝试了,但没有成功,但我认为Azure广告中的权限应该足够了。我的GET
{"error":{"code":"-2130575338, Microsoft.SharePoint.SPException","message":{"lang":"en-US","value":"The file /IT/vystupnidokumentydoc/filename.docx does not exist."}}}
在用户上下文中的浏览器中,相同的查询是可以的
休息电话:
private async static Task DoStuffInOffice365(string token)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
client.DefaultRequestHeaders.Add("Accept", "application / json; odata = verbose");
string url;
url = "https://tenant.sharepoint.com/_api/web/GetFileByServerRelativeUrl('/IT/vystupnidokumentydoc/filename.docx')";
using (HttpResponseMessage response = await client.GetAsync(url))
{
var contents = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
Console.WriteLine("Fail!");
else
Console.WriteLine("OK.");
}
}
获取令牌:
private async static Task<string> GetAccessToken()
{
//authentication context
string authority = "https://login.windows.net/tenant.onmicrosoft.com/";
AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);
var certPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
certPath = certPath.Substring(0, certPath.LastIndexOf('\\')) + $"\\{CERT_FILE}";
var certfile = System.IO.File.OpenRead(certPath);
var certificateBytes = new byte[certfile.Length];
certfile.Read(certificateBytes, 0, (int)certfile.Length);
var cert = new X509Certificate2(
certificateBytes,
PRIVATE_KEY_PASSWORD,
X509KeyStorageFlags.Exportable |
X509KeyStorageFlags.MachineKeySet |
X509KeyStorageFlags.PersistKeySet);
ClientAssertionCertificate cac = new ClientAssertionCertificate(CLIENT_ID, cert);
var authenticationResult = await authenticationContext.AcquireTokenAsync(P_URL, cac);
return token = authenticationResult.AccessToken;
}
private异步静态任务GetAccessToken()
{
//身份验证上下文
字符串权限=”https://login.windows.net/tenant.onmicrosoft.com/";
AuthenticationContext AuthenticationContext=新的AuthenticationContext(authority,false);
var certPath=System.Reflection.Assembly.getExecutionGassembly().Location;
certPath=certPath.Substring(0,certPath.LastIndexOf('\\'))+$“\\{CERT\u FILE}”;
var certfile=System.IO.File.OpenRead(certPath);
var certificateBytes=新字节[certfile.Length];
读取(certificateBytes,0,(int)certfile.Length);
var证书=新的X509Certificate2(
证书字节,
私钥密码,
X509keystrageFlags.可导出|
X509keystrageFlags.MachineKeySet|
X509keystrageFlags.PersistKeySet);
ClientAssertionCertificate cac=新的ClientAssertificate(客户ID,证书);
var authenticationResult=await authenticationContext.AcquireTokenAsync(P_URL,cac);
返回令牌=authenticationResult.AccessToken;
}
根据错误消息,在提供的位置上似乎找不到该文件。请确保文件在站点上退出
我必须在SP中注册此应用吗
如果您正在开发SharePoint加载项,则是。您可以参考SharePoint加载项的身份验证/授权
如果您没有开发SharePoint加载项,我们还可以使用获取项目并通过下载驱动器项目 文件确实存在。我能够使用相同的URL fom浏览器(用户上下文)检索它。我可以从我的应用程序访问列表和其他REST操作。只有文件有问题。