C# Sharepoint-ADAL OAuth-文件不存在

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

我正在创建使用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操作。只有文件有问题。