Доступ к общей ссылке OneDrive из .NET Web / WinForm - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь добавить функцию на свой веб-портал, читать данные из OneDrive.Мой друг отшлифует мою ссылку, подобную этой https://1drv.ms/f/s!AvB...... Если я открою в браузере, я вижу удаленную общую папку.

Итак, я создаю приложение на своем клиенте Azure и аутентифицируюсь с помощью toke

using (var webClient = new WebClient())
            {
                var requestParameters = new NameValueCollection();
                requestParameters.Add("resource", resource);
                requestParameters.Add("client_id", clientID);
                requestParameters.Add("grant_type", "client_credentials");
                requestParameters.Add("client_secret", clientSecret);

                var url = "https://login.microsoftonline.com/eb42xxxx-xxxx-yyyy-zzzz-xxxxxxxxxx/oauth2/token"; 
                webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                var responseBytes = AsyncHelper.RunSync(() => webClient.UploadValuesTaskAsync(url, "POST", requestParameters));
                var responseBody = Encoding.UTF8.GetString(responseBytes);

                jsonObject = Newtonsoft.Json.JsonConvert.DeserializeObject<TokenMicrosoftGraph>(responseBody);
                var token = jsonObject.access_token;
            }

И я могу получить токен, поэтому теперь я пытаюсь получить список файлов в общей папке и обнаружил первую проблему: - URL-адрес, отправленный моим другом, необходимо преобразовать

var respUsri = response.ResponseUri.ToString();
            string base64Value = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(respUsri));
            string encodedUrl = "u!" + base64Value.TrimEnd('=').Replace('/','_').Replace('+','-');

Наконец, я вызываю MS Graph

 var clientR2 = new RestSharp.RestClient("https://graph.microsoft.com/v1.0/shares/"+encodedUrl);
            var request2 = new RestSharp.RestRequest(RestSharp.Method.GET);
            request2.AddHeader("Authorization", "Bearer " + jsonObject.access_token);
            //request
            var response2 = clientR2.Execute(request2);

, но это не работает, я выдаю ошибку:

{
  "error": {
    "code": "AccessDenied",
    "message": "Either scp or roles claim need to be present in the token.",
    "innerError": {
      "request-id": "f52734a3-09b9-4631-a8de-a0d6aa323a93",
      "date": "2019-04-05T14:43:45"
    }
  }
}

Я пытаюсь добавить или удалить все множестворазрешение на мое заявление, но ситуация не меняется.Я прочитал много-много раз документацию на сайте MS, но я не понимаю, в чем я не прав.

У кого-нибудь есть похожая ситуация, и он может читать данные из OneDrive?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...