Как в настройке O365 стало возможным вход в систему с thephpleague / oauth2-client и работа с msgraph-sdk- php? - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь реализовать клиент php, получить доступ к почтовому ящику пользователя с помощью Graph API. Поскольку это фоновая служба, которая должна извлекать указанное c почтовое вложение, она должна работать с паролем типа предоставления. До сих пор мне было очень легко работать, сделав вход в систему с помощью thephpleague / oauth2-client и типа предоставления client_credentials:

    $provider = new \League\OAuth2\Client\Provider\GenericProvider([
      'clientId'                => '...',
      'clientSecret'            => '...',
      'redirectUri'             => 'https://login.microsoftonline.com/common/oauth2/nativeclient',
      'urlAuthorize'            => null,
      'urlAccessToken'          => 'https://login.microsoftonline.com/.../oauth2/token?api-version=1.0',
      'urlResourceOwnerDetails' => 'https://graph.microsoft.com/v1.0/me',
    ]);

    $accessToken = $provider->getAccessToken('client_credentials');

Теперь я пробую его с паролем типа предоставления, но это не удается:

    $provider = new \League\OAuth2\Client\Provider\GenericProvider([
      'clientId'                => '...',
      'clientSecret'            => '...',
      'redirectUri'             => 'https://login.microsoftonline.com/common/oauth2/nativeclient',
      'urlAuthorize'            => null,
      'urlAccessToken'          => 'https://login.microsoftonline.com/.../oauth2/token?api-version=1.0',
      'urlResourceOwnerDetails' => 'https://graph.microsoft.com/v1.0/me',
    ]);

    $accessToken = $provider->getAccessToken('password', [
      'username'                => '...',
      'password'                => '...',
    ]);

Ответ я получаю: invalid_request. Google, эта ошибка, я пришел к https://docs.microsoft.com/de-de/azure/active-directory/develop/v2-oauth2-auth-code-flow, который говорит мне, я должен исправить свой запрос.

Теперь ... как-то сложно, найти и б) найти учебник, рассказать, как правильно добавить приложение, чтобы я мог заставить его работать (возможно, и результат, потому что макет o365 меняется быстро ...)

У кого-нибудь есть идея, что правильные параметры и что я должен делать в Azure Центре администрирования Active Directory, чтобы он работал?

Моя цель - «только», получить доступ к почтовому ящику пользователя и получить вложения из существующих писем. Я думаю, что когда я могу успешно пройти аутентификацию, все остальное легко (надеюсь, что так).

1 Ответ

0 голосов
/ 23 марта 2020

Пожалуйста, обратитесь к официальному учебнику: Аутентификация с помощью службы Microsoft Graph .

Для аутентификации в качестве приложения вы можете использовать HTTP-клиент Guzzle , который поставляется с этой библиотекой, например, вот так:

<?php
require __DIR__ . '/vendor/autoload.php';
$guzzle = new \GuzzleHttp\Client();
$tenantId = 'your_tenanet_id, e4c9ab4e-****-****-****-230ba2a757fb';
$clientId = 'your_app_id_registered_in_portal, dc175b96-****-****-****-ea03e56da5e7';
$clientSecret = 'app_key_generated_in_portal, /pGggH************************Zr732';
$url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token';

$user_token = json_decode($guzzle->post($url, [
    'form_params' => [
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
        'resource' => 'https://graph.microsoft.com/',
        'grant_type' => 'password',
        'username' => 'your_user_id, jack@***.onmcirosoft.com', 
        'password' => 'your_password'
    ],
])->getBody()->getContents());
$user_accessToken = $user_token->access_token;

$graph = new Graph();
$graph->setAccessToken($user_accessToken );

$response = $graph->createRequest('Get','/me/messages')
    ->setReturnType(Model\Message::class)
    ->execute();

?>

Обратите внимание, что ресурс должно быть https://graph.microsoft.com/

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