[Alexa] Microsoft Graph にアカウントリンクしてみました 〜AlexaでOffice 365を操作するために〜

2017.11.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

Microsoft Graphは、Office 365などのMicrosoft Cloud サービスリソースへのアクセスを可能にするRESTful Web API です。従来、outlook.comなど複数に分かれていたエンドポイントを統合したものです。

Microsoft Graphは、アクセストークンを使用してURLで機能にアクセスし、応答はJSONで返るという「モダン」な作りになっています。

そして、ここで必要となるアクセストークンは、OAuth2で取得可能になっています。

023

Amazon Alexa(以下、Alexa)のスキルには、アカウントリンクという機能があり、OAuth2でアクセストークンを取得して、他のサービスの機能を利用することができます。

今回は、このAccunt LinkingでMicrosoft Graphに繋いでみました。

2 アプリの作成

Microsoft Graphでアカウントリンクするためには、アプリを作成する必要があります。

アプリの作成要領は、以下のとおりです。

  • アプリの追加
  • シークレットの作成
  • リダイレクトURLの設定
  • アクセス許可の追加
  • 設定の保存

(1) アプリの追加

001

  • Application Nameを設定し(ここでは、AccountLinkingWidthMSGraphとしました。)Createを押します。

002

  • 生成されたアプリケーションIDは、Amazon開発者コンソールでの設定に必要なのでコピーしておきます。

011

(2) シークレットの作成

  • アプリケーション シークレットで、新しいパスワードを生成 を選択ます。

003

  • ここで生成されたパスワードは、2度と表示できません。Amazon開発者コンソールでの設定に必要なので、こちらもコピーしておきます。

004

  • シークレットが一覧されている事が確認できます。

005

(3) リダイレクトURLの設定

  • プラットフォームからプラットフォームの追加を選択します。

006

  • 種類は、Webを選択します。

007

  • リダイレクトURLを設定します。

008

リダイレクトURLは、Amazon開発者コンソールからコピーできます。

009

※ちょっと、ここが不明なのですが、Alexaが日本語に対応してから、リダイレクトURLにalexa.amazon.co.jpが増えたのですが、Microsoft Graphの方では、異なるドメインを受け付けないようです。 対応方法が分かりましたら、この部分更新したいと考えております。

(4) アクセス許可の追加

  • Microsoft Graphのアクセス許可からoffline_access を追加します。なお、注意が必要なのは、offline_access は、期限が切れた際のTokenのリフレッシュの為に必須です。

013

012

(5) 設定の保存

  • 保存を押して設定を保存すればアプリの作成は完了です。

010

3 アカウントリンクの設定

Amazon開発者コンソールでのアカウントリンクの設定は以下のとおりです。

  • 認証URL「https://login.microsoftonline.com/common/oauth2/v2.0/authorize」
  • クライアント ID アプリの「アプリケーションID」です。
  • スコープ 「user.read offline_access」
  • 認証タイプ 「Auth Code Grant」
  • アクセストークンURL 「https://login.microsoftonline.com/common/oauth2/v2.0/token」
  • クライアントシークレット アプリで生成した「アプリケーションシークレット」です。
  • クライアント認証スキーム 「リクエストボディの資格情報」

021

4 ユーザーによる承認

ユーザーによる承認は、以下のようになります。

  • Arexaアプリで当該スキルを開きます。

014

  • SETTINGを選択します。

015

  • Link Accountを選択して、認証開始します。

016

  • Microsoftのログインページに移動しますので、リンクするアカウントでログインします。

017

  • 表示されているアクセス権に問題が無ければ、承諾を押します。

018

  • Alexaでアクセストークンの取得が成功すれば、successfully linkdと画面に表示されます。

019

  • Account Linkingのところは、Linkedに変化しています。 020

5 Tokenの取得と動作確認

アカウントリンクが成功すると、トークンは、Alexa側に取得されており、スキルのリクエスト時に一緒に送られてきます。これは、サービスシミュレーターで、スキルを実行して確認することができます。

022

Alexaから送られてきたアクセストークンを使用して、Microsoft Graphのエンドポイントにアクセスしてみましたが、問題なくアクセス出来ている事が確認できました。

$ curl -X GET -H "Authorization:Bearer {ここにアクセストークンを入れる}" https://graph.microsoft.com/v1.0/me/
{
    "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users/$entity",
    "id":"4fe8xxxx-xxxx-xxxx-xxxx-xxxx5aed0","businessPhones":[],
    "displayName":"alexa-user1","givenName":"user1","jobTitle":null,
    "mail":"user1@alexa-dev.tokyo","mobilePhone":null,"officeLocation":null,
    "preferredLanguage":"ja-JP","surname":"alexa",
    "userPrincipalName":"user1@alexa-dev.tokyo"
}

6 最後に

アカウントリンクを使用するとAlexaからOffice365の機能へのアクセスが可能になります。 Outlookの新着メールをAlexaで聞いたり、予定表に繋いで今日の予定をAlexaで聞くなんてのも、ちょっと面白いのでは無いでしょうか

7 参考リンク


Microsoft Graph
Alexaユーザーとシステムユーザーを関連付ける
Microsoft Graph (Unified API) を使いこなそう
Office 365 API リファレンス
Amazon AlexaのAccount Linkingを使ってAmazon EchoからTwitterに書き込ませてみる
[Alexa] Account Linking を使用してスキルからFacebookに投稿してみました
[Alexa] Login with Amazon との Account Linking で名前を呼びかける挨拶とかメールを送信するスキルを作ってみました
[Alexa] LINEログインでAccount Linkingしてみた