2016-11-03 3 views
1

Я следую примеру, представленному на графике Microsoft repository on github. В нем описывается использование DelegateAuthenticationProvider, которому нужен токен доступа. Marc LaFleur's primer on auth flow указал способ получить токен доступа, который я объединил с guidance при выполнении работы службы аутентификации.InvalidAuthenticationToken при попытке вызвать Microsoft Graph client

Даже если я получаю то, что , как представляется, является допустимым маркеров доступа, когда я выполняю команду с помощью клиента графа, я получаю ServiceException от Microsoft Graph о том,

«{ Код: InvalidAuthenticationToken сообщение : Ошибка проверки доступа к токенам. Внутренняя ошибка } «

Я не видел никакой другой внутренней ошибки.

Что я делаю неправильно?

Это код, который я придумал:

var clientId = "[app-guid]"; 
var clientSecret = "[secret-from-app-dashboard]"; 
var resource = "[app-guid]"; 
var baseUrl = "https://login.microsoftonline.com"; 
var loginUrl = "/[tenant guid]/oauth2/token"; 
using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri(baseUrl); 
    var content = new FormUrlEncodedContent(new[] 
    { 
     new KeyValuePair<string, string>("grant_type", "client_credentials"), 
     new KeyValuePair<string, string>("client_id", clientId), 
     new KeyValuePair<string, string>("client_secret", clientSecret), 
     new KeyValuePair<string, string>("resource", resource) 
    }); 
    var result = client.PostAsync(loginUrl, content).Result; 
    string resultContent = result.Content.ReadAsStringAsync().Result; 
    var json = JObject.Parse(resultContent); 

    accessToken = (string)json["access_token"]; 

} 
var header = new AuthenticationHeaderValue("Bearer", accessToken); 
var graphserviceClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
(requestMessage) => 
{ 
    requestMessage.Headers.Authorization = header; 


    return Task.FromResult(0); 
})); 
try 
{ 
    var users = await graphserviceClient.Users.Request().GetAsync(); 
    var user = users.First(); 
} 
catch (Microsoft.Graph.ServiceException servex) 
{ 
    Console.WriteLine(servex); 
} 

ответ

0

Вы устанавливаете ваш ресурс, чтобы указать на свой веб-сайт, но он должен указывать на внешний веб-ресурс, который вы хотите получить доступ. Попробуйте следующее:

var resource = "https://graph.microsoft.com/"; 
+0

Спасибо за это, но теперь я получаю это в своем исключении: «Идентификатор вызывающего приложения не может быть установлен». Для возвращаемого accessToken это выглядит нормально, так как оно содержит имя аутентифицируемого приложения. – Irwin

+1

Я смог воспроизвести эту проблему в Postman, но не в приложении, зарегистрированном по правильному URL-адресу. Я бы дважды проверял вашу регистрационную информацию, особенно зарегистрированные вами URL-адреса. Вы зарегистрировались на портале apps.dev.microsoft.com или с помощью Azure AD? Я также удостоверился, что ваши разрешения установлены правильно. Необходимо настроить как минимум Microsoft Graph и Windows Azure Service Management. –