2015-04-15 6 views
1

Я пытаюсь получить доступ к API REST Office365, используя библиотеку ADAL, но получаю 401 (неавторизованный) и не могу понять, почему. Я зарегистрировал приложение в нашем Azure AD, получил идентификатор, извлек ключ для него и дал ему разрешения на чтение Active Directory Windows Azure.Office365 REST API. Получение 401 (неавторизованный) с использованием ADAL

Я могу приобрести токен OAuth, но он не будет работать с API Office365.

Вот один из моих неудачных попыток:

AuthenticationContext auth = new AuthenticationContext("https://login.windows.net/" + myTenant); 
    AuthenticationResult authenticationResult = auth.AcquireToken("http://Rest", new ClientCredential(myId, myKey)); 
    HttpClient client = new HttpClient(); 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken); 
    HttpResponseMessage msg = await client.GetAsync("https://outlook.office365.com/api/v1.0/me/events"); 
    // => Bam. 401. :(

Любые идеи?

ответ

2

Идентификатор ресурса, который вы передаете AcquireToken, недействителен. Это должно быть "https://outlook.office365.com/". Посмотрите, поможет ли это. Если нет, попробуйте разобрать маркер и искать проблемы: https://github.com/jasonjoh/office365-azure-guides/blob/master/ValidatingYourToken.md

+0

Спасибо! Правильный resourseid не помог, но ваш токен-парсер показывает мне, что зарегистрированные теги пользователя (upn, unique_name, family_name, given_name) и, возможно, хуже, тег разрешений (тег scp :) отсутствует. Ясно, что я здесь что-то не хватает. Но что? – BaBu

+0

Вы можете попытаться использовать общую конечную точку OAuth, https://login.windows.net/common, в конструкторе AuthenticationContext. Кроме того, когда вы зарегистрировали свое приложение, вы указали разрешения приложений или делегированные разрешения? Какие разрешения вы дали вам в целом? –

+0

По какой-то причине он удаляет «https: //» перед этой конечной точкой :). –