![](/img/trans.png)
[英]Revoke access of microsoft/outlook account using outlook or graph rest API
[英]How to access outlook address book using outlook rest api
我想通过outlook rest api访问一个组织的全球通讯录
我能够使用 OAUTH2 实现单点登录部分,但我无法理解如何访问联系人对象
我已经经历了这个和许多其他例子,但无法理解如何在 PHP 中实现它们
首先,如果你想使用rest api访问outlook联系人,目前微软建议客户使用Microsoft Graph 。 更多详情请参考文档
其次,关于如何通过php应用获取outlook conatcts,需要使用oauth2-client添加Azure AD身份验证并获取Azure AD访问令牌,然后调用api获取访问令牌的联系人。 例如,请参考以下步骤了解如何在 php web application 中实现
使用 SDK oauth2-client
实现 Azure AD 身份验证创建一个.env
文件
OAUTH_APP_ID=YOUR_APP_ID_HERE OAUTH_APP_PASSWORD=YOUR_APP_PASSWORD_HERE OAUTH_REDIRECT_URI=<your redirect url> OAUTH_SCOPES='openid profile offline_access' + <your need outlook permissions> OAUTH_AUTHORITY=https://login.microsoftonline.com/common OAUTH_AUTHORIZE_ENDPOINT=/oauth2/v2.0/authorize OAUTH_TOKEN_ENDPOINT=/oauth2/v2.0/token
湾获取访问令牌
<?php namespace App\\Http\\Controllers; use App\\Http\\Controllers\\Controller; use Illuminate\\Http\\Request; class AuthController extends Controller { public function signin() { // Initialize the OAuth client $oauthClient = new \\League\\OAuth2\\Client\\Provider\\GenericProvider([ 'clientId' => env('OAUTH_APP_ID'), 'clientSecret' => env('OAUTH_APP_PASSWORD'), 'redirectUri' => env('OAUTH_REDIRECT_URI'), 'urlAuthorize' => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'), 'urlAccessToken' => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'), 'urlResourceOwnerDetails' => '', 'scopes' => env('OAUTH_SCOPES') ]); $authUrl = $oauthClient->getAuthorizationUrl(); // Save client state so we can validate in callback session(['oauthState' => $oauthClient->getState()]); // Redirect to AAD signin page return redirect()->away($authUrl); } public function callback(Request $request) { // Validate state $expectedState = session('oauthState'); $request->session()->forget('oauthState'); $providedState = $request->query('state'); if (!isset($expectedState)) { // If there is no expected state in the session, // do nothing and redirect to the home page. return redirect('/'); } if (!isset($providedState) || $expectedState != $providedState) { return redirect('/') ->with('error', 'Invalid auth state') ->with('errorDetail', 'The provided auth state did not match the expected value'); } // Authorization code should be in the "code" query param $authCode = $request->query('code'); if (isset($authCode)) { // Initialize the OAuth client $oauthClient = new \\League\\OAuth2\\Client\\Provider\\GenericProvider([ 'clientId' => env('OAUTH_APP_ID'), 'clientSecret' => env('OAUTH_APP_PASSWORD'), 'redirectUri' => env('OAUTH_REDIRECT_URI'), 'urlAuthorize' => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'), 'urlAccessToken' => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'), 'urlResourceOwnerDetails' => '', 'scopes' => env('OAUTH_SCOPES') ]); try { // Make the token request $accessToken = $oauthClient->getAccessToken('authorization_code', [ 'code' => $authCode ]); return redirect()->route('contacts'); } catch (League\\OAuth2\\Client\\Provider\\Exception\\IdentityProviderException $e) { return redirect('/') ->with('error', 'Error requesting access token') ->with('errorDetail', $e->getMessage()); } } return redirect('/') ->with('error', $request->query('error')) ->with('errorDetail', $request->query('error_description')); } } ```
将访问令牌与Microsoft Graph SDK 一起使用。 更多详情请参考文档
public function mail()
{
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
$tokenCache = new \App\TokenStore\TokenCache;
$graph = new Graph();
$graph->setAccessToken($tokenCache->getAccessToken());
$contacts = $graph->createRequest('GET', '/me/contacts/{Id}')
->setReturnType(Model\Contact::class)
->execute();
}
具体实现方式请参考示例
另外,如果你想用php调用outlook rest api,请参考文档。 但请注意,您需要更改应用程序权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.