Azure App Service WebアプリでOffice365操作

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

Office365を使用するにあたって、Webでできない操作や一括処理を行う際などは一般的にPowerShellが使用されますが、Office365 APIが提供されたことにより、PHPなどのオープンソース言語からでもOffice365の操作ができるようになりました。

そこで、PHPなどのオープンソースを使用して簡単にWebアプリケーションが作成できるAzure App Serviceを使い、Azure App Service上のWebアプリケーションからOffice365を操作する検証をしてみました。

 

Azure App Service、Office365 APIについて

Azure App Serviceとは、アプリケーションを動作するためのPaaS環境で、アプリケーションの構築には、.NET、NodeJS、Java、PHP、Pythonなど様々な言語を使用することができます。

Office365は、OAuthとRESTによって連携することができます。Office365 APIは、Exchange Online、SharePoint Online、OneDrive for BusinessなどにあるOffice365データにアクセスできるようにするRESTサービスです。

今回の検証では、「Exchange Online上の受信メールの情報(最新10件)を取得し表示する」というアプリケーションを、Azure App Service上にPHPを使用して作成してみたいと思います。

 

クライアントID、キー、確認コードの取得

Office365とOAuthにより認証を行う為、アプリケーションを作成し、クライアントID、キー(クライアントシークレット)、確認コードを取得します。
【手順】
1.以下のURLよりAzureの管理ポータルにサインインします。

https://manage.windowsazure.com/

2.画面左部のメニューから「ACTIVE DIRECTORY」を選択します。

image006

3.Office365のユーザー情報を登録しておくためのディレクトリが表示されますので、クリックします。

image002

4.「アプリケーション」をクリックします。

image010

5.画面下部の「追加」をクリックします。

image012

6.「組織で開発中のアプリケーションを追加」をクリックします。

image014

7.「名前」に任意の名前を入力し、「→」をクリックします。

image004

8.「サインオンURL」にアプリケーションを動かすURLを入力します。

image018

9.「アプリケーションID/URI」に、https://<テナントのドメイン>/<テナント内で一意の値> を入力し、「✔」をクリックします。

image011

10.アプリケーションの追加完了画面が表示されます。画面上部の「構成」をクリックします。

image012

11.画面を下部にスクロールし、「アプリケーションはマルチテナントです」にて「はい」をクリックします。

image013

12.「クライアントID」をコピーして、メモ帳などに張り付けておきます。

image014

13.下部にスクロールし、「キー」にて「1年」を選択します。

image015

14.画面下部の「保存」をクリックします。

image016

15.画面にキーが表示されますので、コピーしてメモ帳などに張り付けておきます。

image017

16.画面下部にスクロールし、「アプリケーションの追加」をクリックします。

image018

17.今回はExchange Online上の受信メールの情報を取得するアプリケーションを作成しますので、「Office365 Exchange Online」をクリックします。

image019

18.「選択済み」に「Office365 Exchange Online」が表示されますので、画面下部の「✔」をクリックします。

image021

19.アプリケーションが操作できる権限を設定します。「デリゲートされたアクセス許可」のプルダウンより「Read user mail」にチェックを入れ、画面下部の「保存」をクリックします。

image022

20.上記でクライアントIDとキーが取得できました。次に確認コードを取得します。ブラウザに以下のURLを入力します。

https://login.windows.net/common/oauth2/authorize?response_type=code&client_id=<上記で取得したクライアントID>&resource=https%3a%2f%2foutlook.office365.com%2f&redirect_uri=<リダイレクトURI>

<例>
https://login.windows.net/common/oauth2/authorize?response_type=code&client_id=80a273c8-086f-44d3-978axxxxxxxxxxx&resource=https%3a%2f%2foutlook.office365.com%2f&redirect_uri=https%3a%2f%2flocalhost%2ftest001

 

21.サインイン画面が表示されますので、上記1で管理ポータルにサインインしたユーザーでサインインします。

image023

22.認証に成功すると、ブラウザは、「リダイレクトURI?code=確認コード」のURLに遷移しますので、確認コードの部分をコピーしてメモ帳などに張り付けておきます。

 

Azure App Service Webアプリケーションの作成

Azure App Service にて、Exchange Onlineを操作するWebアプリケーションを作成します。
(以下の例では、Exchange Onlineより受信メール(最新10件)を取得し、ブラウザに表示するアプリケーションを作成します。)
【手順】
23.以下のURLよりAzureの管理ポータルにサインインします。

https://portal.azure.com/

  1. 画面左部のメニューから「参照」→「Marketplace」の順にクリックします。

image024

  1. 検索用のテキストボックスに「php」と入力してエンターを押します。

image025

26.「PHP Empty Web App」をクリックします。

image026

27.「作成」をクリックします。

image027

28.アプリ名に任意の値(Azure上で一意である必要があります)、リソースグループ名に任意の値を入力し、「作成」をクリックします。

image028

29.画面左部のメニューから「App Service」をクリックして、作成したApp Serviceが表示されることを確認します。

image029

  1. Visual Studio Onlineを使用してソースコードを実装するため、Visual Studio Onlineを使えるようにします。表示されたApp Serviceを右クリックして「ツール」をクリックします。

image030

31.「Visual Studio Online」をクリックして、「オン」をクリックします。これでVisual Studio Onlineが使えるようになります。

image031

32.「移動→」をクリックします。

image032

  1. Visual Studio Onlineが起動します。「WWWROOT」配下にある「index.php」をクリックします。

image033

34.「index.php」の編集画面が表示されます。

image034

35.「index.php」に以下のコードを記載します。

<?php 
if(isset($_GET['code'])) {
  //アクセストークン取得
  $authreq = curl_init();
  curl_setopt($authreq, CURLOPT_URL,
    'https://login.microsoftonline.com/common/oauth2/token');
  curl_setopt($authreq, CURLOPT_POST, true);
  curl_setopt($authreq, CURLOPT_HTTPHEADER,
    array('Content-Type: application/x-www-form-urlencoded'));
  curl_setopt($authreq, CURLOPT_POSTFIELDS, https_build_query(array(
    'grant_type' => 'authorization_code',
    'code' => $_GET['code'],
    'client_id' => 'クライアントIDを記載',
    'client_secret' => 'キーを記載',
    'redirect_uri' => 'リダイレクトURIを記載(「クライアントID、キー、確認コードの取得」の手順8にて指定したアプリケーションを動かすURL)',
  )));
  curl_setopt($authreq, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($authreq, CURLOPT_SSL_VERIFYPEER, false);
  $authres = json_decode(curl_exec($authreq));
  curl_close($authreq);
  $access_token = $authres->access_token;

  //Office365 Exchange Online より受信メール取得(最新10件)
  $datareq = curl_init();
  curl_setopt($datareq, CURLOPT_URL,
    'https://outlook.office365.com/api/v1.0/me/messages?$top=10&$orderby=DateTimeSent%20desc&$select=Subject,DateTimeReceived,From');
  curl_setopt($datareq, CURLOPT_HTTPHEADER,
    array('Authorization: Bearer ' .$access_token));
  curl_setopt($datareq, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($datareq, CURLOPT_SSL_VERIFYPEER, false);
  $results = json_decode(curl_exec($datareq));
  curl_close($datareq);

  // 結果表示
  header('Content-type: text/html; charset=utf-8');
  echo '受信メール一覧(最新10件)';
  echo '<table border=1><tr bgcolor="pink">';
  echo '<td>件名</td><td>受信日時</td><td>送信者</td></tr>';
  foreach($results->value as $entry) {
    echo '<tr>';
    echo '<td>';
    echo $entry->Subject;
    echo '</td>';
    echo '<td>';
    echo $entry->DateTimeReceived;
    echo '</td>';
    echo '<td>';
    echo $entry->From->EmailAddress->Address;
    echo '</td>';
    echo '</tr>';
  }
  echo '</table>';
}else {
  echo 'codeError!!';
}

?>

記載したコードの保存は自動で行われます。画面上部にSAVEDと表示されていれば、最新のコードが保存されている状態です。

image037

以上でWebアプリケーションの作成が完了です。

 

動作確認

【手順】
36.管理ポータルのトップ画面に戻り、画面左部のメニューから「App Service」をクリックし、作成したApp Serviceをクリックします。

image029

37.「URL」に表示されているURLが作成したApp Service のURLになります。

image038

ブラウザにて、
< App Service のURL>/?code=<確認コード>
にアクセスしてください。
Exchange Onlineの受信メールの最新10件が表示されます。

image039

アバター画像
About サイオステクノロジーの中の人です 88 Articles
サイオステクノロジーで働く中の人です。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる