簡體   English   中英

如何設置 O365 使使用 phpleague/oauth2-client 登錄並使用 msgraph-sdk-php 成為可能?

[英]How to setup O365 made possible login with thephpleague/oauth2-client and working with msgraph-sdk-php?

我嘗試實現一個php客戶端,使用graph api訪問用戶的郵箱。 因為它是一個后台服務,它應該獲取特定的郵件附件,所以它必須使用授權類型的密碼運行。 到目前為止,我非常輕松地使用 phpleague/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 谷歌那個錯誤,我來到https://docs.microsoft.com/de-de/azure/active-directory/develop/v2-oauth2-auth-code-flow它告訴我,我應該解決我的請求。

現在......不知何故很難,找到a)一個資源告訴哪個url是正確的,b)找到一個教程,告訴我如何正確添加一個應用程序,這樣我就可以讓它工作(也許也是一個結果,因為o365布局變化很快...)

有沒有人知道正確的參數是什么以及我必須在 Azure Active Directory 管理中心做什么才能使其正常工作?

我的目標是“僅”訪問用戶郵箱並從現有郵件中獲取附件。 我認為,當我可以成功進行身份驗證時,所有其他事情都很容易(希望如此)。

請參考官方教程: 使用 Microsoft Graph 服務進行身份驗證

要作為應用程序進行身份驗證,您可以使用Guzzle HTTP 客戶端,該客戶端預裝了此庫,例如:

<?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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM