Я получаю 401 неверный токен авторизации при попытке доступа к файлам OneDrive - PullRequest
0 голосов
/ 08 мая 2019

Мне кажется, что я получаю действительный токен доступа от службы Microsoft Graph, используя этот код, который я в основном скопировал и вставил с сайта Microsoft Graph.

string[] scopes = { "user.read", "files.read"};// new string["user.read"];
AuthenticationResult result = null;
var clientId = [REDACTED];
var app = PublicClientApplicationBuilder.Create(clientId).Build();
var accounts = await app.GetAccountsAsync();

try
{
    result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault()).ExecuteAsync();
}
catch (MsalUiRequiredException ex)
{
    // A MsalUiRequiredException happened on AcquireTokenSilent.
    // This indicates you need to call AcquireTokenInteractive to acquire a token
    System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");

    try
    {
        result = await app.AcquireTokenInteractive(scopes)
                          .ExecuteAsync();
    }
    catch (MsalException msalex)
    {
        Debug.WriteLine( $"Error Acquiring Token:{System.Environment.NewLine}{msalex}");
    }
}
catch (Exception ex)
{
    Debug.WriteLine($"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}");
    return;
}

if (result != null)
{
    accessToken = result.AccessToken;
    // Use the token
}

AuthenticationResult.AccessToken выглядит как токен.В область AuthenticationResult входят следующие области:

  • files.read
  • files.read.all
  • openid
  • profile
  • user.read

Я делаю свой запрос следующим образом

UriBuilder builder = new UriBuilder("https://api.onedrive.com");
builder.Path = "/v1.0/me/drive/root/children";
Uri url = builder.Uri;

HttpClient httpClient = new HttpClient();

httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
var response = await httpClient.GetAsync(url);

Результат таков:

{StatusCode: 401, ReasonPhrase: '', Version: 2.0, Content: System.Net.Http.StreamContent, Headers:
{
  x-qosstats: {"ApiId":0,"ResultType":2,"SourcePropertyId":0,"TargetPropertyId":42}
  x-throwsite: 4f37.717b
  strict-transport-security: max-age=31536000; includeSubDomains
  x-msnserver: CH1AAPCE5584BBF
  p3p: CP="BUS CUR CONo FIN IVDo ONL OUR PHY SAMo TELo"
  date: Wed, 08 May 2019 05:15:17 GMT
  www-authenticate: Bearer realm="OneDriveAPI", error="invalid_token", error_description="Invalid auth token"
  x-msedge-ref: Ref A: 8DF9298AE79A4F8A8417D0A41221308F Ref B: WSTEDGE1006 Ref C: 2019-05-08T05:15:17Z
  x-asmversion: UNKNOWN; 19.245.502.2003
  content-length: 70
}}

Я играл с разными прицеламии разные запросы.Я также много раз искал здесь и в других местах и ​​нашел похожие проблемы, но ничего не помогло.У меня есть ощущение, что это проблема с областями действия / разрешениями, но я смотрел на ссылку на разрешения , но не могу понять.

Я должен отметить, что смогчтобы заставить это работать, используя старую оболочку OneDrive SDK, поэтому я знаю, что мое приложение настроено правильно.Я пытаюсь переключиться на vanilla REST API.

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