Я использовал это:
https://github.com/Azure-Samples/active-directory-php-graphapi-web.git
чтобы получить доступ к графику API, который работает. Мое зарегистрированное приложение Azure AD может запрашивать API, чтобы получить список пользователей в каталоге.
Но теперь я хочу перечислить папки для пользователя в каталоге.
Эта страница
http://graph.microsoft.io/docs
говорит, что URL должен быть:
https://graph.microsoft.com/v1.0/me/drive/root/children
Когда я использую этот URL в моем вызове REST, я получаю
"code": "InvalidAuthenticationToken",
"message": "CompactToken parsing failed with error code: -2147184105"
Имеет смысл, он получает токен от
https://graph.windows.net
Итак, я потерян. Существует так много разных версий API, от onedrive потребительского уровня (ранее skydrive), до первого api графа (к которому я получаю доступ через https://graph.windows.net) API Office 365 (к которому я получаю доступ через https://login.microsoftonline.com) и теперь граф API (ранее универсальный API) https://graph.microsoft.comЯ просто не знаю, с чего начать искать правильную информацию.
Сейчас я работаю в PHP, и я уверен, что в списке поддерживаемых платформ Microsoft будет довольно мало, но есть какие-то указания относительно того, как работает генерация токенов доступа в новейших API, в отличие от API o365, по сравнению с другим графиком. API (на graph.windows.net) будет принята с благодарностью.
Кто-нибудь еще так же смущен, как и я?
Есть ли какая-то центральная справка, которая объясняет все различия между этими API и как получить к ним доступ?
График Microsoft должен предоставить вам одну конечную точку (и получение токена) для доступа к данным, предлагаемым службами Office 365 и Azure AD. Пожалуйста, посетите https://graph.microsoft.com для получения более подробной информации — но, пожалуйста, используйте версию v1.0, поскольку это версия GA, которая подходит для производственных служб.
Что касается вашего вопроса о сервисном приложении без пользовательского интерфейса — вы можете получить токен доступа только для приложения, используя поток client_credential. (В настоящее время это не задокументировано в документации Microsoft Graph, но поддерживается и описывается в другом месте — просто установите ресурс, чтобы быть https://graph.microsoft.com/). На портале управления Azure вам нужно выбрать «Права доступа к приложениям», которые требуются и вашему приложению. В настоящее время доступ к почтовым ресурсам только для приложений поддерживается, но доступ только для приложений к одному диску (через граф Microsoft) не поддерживается. Мы будем искать, чтобы открыть это в ближайшее время.
Надеюсь это поможет,
Конечная точка https://login.microsoftonline.com
является конечной точкой авторизации Azure AD, которая предоставляет страницу единого входа для пользователей, которые входят в систему и проходят проверку подлинности & получить код авторизации.
Остальным нравится https://graph.microsoft.com
является конечной точкой ресурса, которая построена на REST API и предоставляет ресурсы и услуги от Microsoft.
В частности, до конечной точки https://graph.windows.net
, объяснение на официальном сайте:
API-интерфейс Azure Active Directory Graph обеспечивает программный доступ к Azure Active Directory через конечные точки REST API. Приложения могут использовать API-интерфейс Azure AD Graph для выполнения операций создания, чтения, обновления и удаления (CRUD) над данными каталога и объектами каталога, такими как пользователи, группы и контакты организации.
А такжеhttps://graph.mircosoft.com
это унифицированный API, который также включает в себя API-интерфейсы других служб Microsoft, таких как Outlook, OneDrive, OneNote, Planner и Office Graph, доступ к которым осуществляется через единую конечную точку с одним токеном доступа.
Ссылаться на AD Graph REST для дополнительной информации.
Чтобы интегрировать Office 365 с помощью Azure AD, необходимо проверить, есть ли у вас клиент Office 365 и имеет ли администратор пользователя Office 365 право доступа в Azure AD. Вы можете обратиться к Глубокое погружение в унифицированный API-интерфейс Office 365 пошаговое руководство по интеграции унифицированного API Office 365.
Кроме того, вы можете обратиться к Начните работу с API Office 365 на базе Microsoft Graph создать пример PHP.
Я действительно изо всех сил старался импортировать живые контакты. Но после нескольких дней R&D я нашел https://dev.office.com/blogs/outlook-rest-api-v1-0-office-365-discovery-and-live-connect-api-deprecation что заставило меня переключиться на график Microsoft. Я также пробовал с лазурной документацией и другими вещами, но я нашел это очень запутанным, но все же я не был ясен с этим. Так что я реализовал следующее в php, которое оказалось К счастью, успешным. Просто выполните следующие действия: 1) Создайте приложение в https://apps.dev.microsoft.com a) Сгенерируйте новый пароль. Сохраните идентификатор приложения и пароль при себе. б) Добавить платформу как веб и добавить URL перенаправления с https, так как можно использовать только https, а http не применяется.
c) Проверьте поддержку Live SDK в разделе Дополнительные параметры и сохраните.
2) передать область видимости в URL как contacts.read, так как нам нужны контакты пользователя, вошедшего в систему.
$client_id="YOUR_CLIENT_ID";
$redirect_uri = SiteUrl.'hotmail-contact';
$url="https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=".$client_id."&response_type=code
&redirect_uri=".$redirect_uri."&response_mode=query
&scope=offline_access%20user.read%20mail.read%20contacts.read
&state=12345";
3) После успешной аутентификации он вернет код авторизации. Теперь после получения кода мы получаем запрос на токен по запросу curl post на https://login.live.com/oauth20_token.srf с постполями как
$fields=array(
'code'=> urlencode($auth_code),
'client_id'=> urlencode($client_id),
'client_secret'=> urlencode($client_secret),
'redirect_uri'=> urlencode($redirect_uri),
'grant_type'=> urlencode('authorization_code')
);
4) Чтобы получить контакты
$ url = ‘https://graph.microsoft.com/v1.0/me/contacts‘
мы можем даже применить фильтры к ним
Теперь запрос curl с параметром url и token
public function curl_use_token($url,$token) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
// curl_setopt($ch,CURLOPT_HTTPHEADER,array('HeaderName: HeaderValue'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization:Bearer '.$token));
// curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization", "Bearer " + $token));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$data = curl_exec($ch);
curl_close($ch);
// print(gettype($data));
// print($data);
return $data;
}
5) После получения данных возвращаемые данные будут не в чистом формате json, поэтому мы можем извлечь из данных только часть json, применив регулярное выражение, и после его декодирования мы сможем использовать его.
Спасибо за прочтение