Мне кажется, что я получаю действительный токен доступа от службы 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.