繁体   English   中英

如何使用outlook rest api访问outlook通讯录

[英]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 中实现

  1. 注册 Azure AD 应用程序

  2. 配置您的应用程序所需的应用程序权限在此处输入图片说明 在此处输入图片说明

  3. 使用 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')); } } ```
  4. 将访问令牌与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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM