[英]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.