AlexaスキルとAzure認証の連携・後編

前編は単に反省記事でした。今回はAlexaスキルとAADB2Cの連携手法(2018/07時点)を紹介します。

AlexaスキルとAzure認証の連携・前編

早速行きましょう。AADB2C自体の設定方法や、サインインポリシー周辺の整備、Alexaスキル登録の周辺事情等は割愛します。もっと詳しい方の情報を参考にしてください。

  1. AADB2CリソースアクセスできるAPIApplication(設定だけでも可)を作る
  2. 1のApplicationを許可するスコープ付きのAADB2C Applicationを作る
  3. AlexaスキルにAADB2Cへの設定を書く
  4. AADB2Cの全体管理者ユーザーを用意する
  5. Microsoft Graph エクスプローラーでredirectURLを追加

の順です。

とその前に。
2018/1/25のMSDNblog ではAADによる接続を紹介していますが、これだとAADB2Cでは実現不可能です。ただ Azure Function のくだりは今回割愛するので、是非参考にしてください。

AADB2CリソースアクセスできるAPI Applicationを作る

まずはAAD B2C に、Webアクセス用の “Application” を作成します。
[Microsoft]:Azure Active Directory B2C: アプリケーションを登録する
に書いてますね。
ここでは

  • 名前:”test-app1″
  • 応答URL: https://localhost (このredirectUrlは変更しない)
  • アプリID URI(オプション):AAD B2Cでユニークとなる名前(パス)。今回は “testone”

アプリID URIを指定(して保存)すると、ブレードの「公開済みスコープ」を追加できるようになります。とりあえず “read” を作ってみました。

「完全なスコープ値」は自動生成されます(アプリIDURIと組み合わせる)。

「『リソースアクセスできるApplication』を許可するスコープ」付きのAADB2C Applicationを作る

タイトルわかりづらい。test-app1にアクセス可能なAADB2Cアプリケーションを作ります。
test-app1とまとめて1アプリケーションにしても大丈夫だと思いますが、B2Cリソースへのアクセスが必要な場合は毎回スコープ作成しなければならない等手間かかる可能性があります。

作成

  • 名前: “alexa-test-app2”
  • 応答URL: https://localhost (このredirectUrlは後で変更する)

APIアクセス付与

test-app1へのアクセス出来るように追加します。「+追加」を押して

test-app1を選択。元々あったものと”read”と合わせて2項目になっています。

client-secret

Alexaスキルからアクセスするための、クライアントシークレットを作ります。Azureの毎度のごとく、生成直後しかキーが表示されないため、コピペの上保存しておきましょう。

 

AlexaスキルにAADB2Cへの設定を書く

Azureばかりで疲れてきたので、気分を変えて先にAlexa Skillsの設定です。こちらも一般的な設定は [Amazon]AlexaSkillsKitによるスキルの作成 など参考に作成しましょう。ここで説明するのは「アカウントリンク」設定の項目内容です。

  • 認証画面のURI
    • https://login.microsoftonline.com/te/<tenant-name>.onmicrosoft.com/<signin-policy>/oauth2/v2.0/authorize?prompt=select_account
    • tenant-name はAAD B2Cの名前
    • signin-policyはAAD B2Cのサインインポリシー名
  • アクセストークンのURI
  • https://login.microsoftonline.com/te/pixelausers.onmicrosoft.com/B2C_1_custom_signin/oauth2/v2.0/token
  • クライアントID
    • この記事でいうと “alexa-test-app2” のAADB2C アプリケーションID
  • クライアントシークレット
    • コピペしておいたシークレットキー
    • 因みにSkills設定を変更する度、これを書いて保存しないといけない。
  • クライアントの認可方法
    • リクエスト本文の資格情報
  • スコープ
    • 次を列挙
      • openid
      • offline_access (リフレッシュトークンを必要とする場合必要)
      • https://<tenant-name>.onmicrosoft.com/<apipath>/read
        • apipathは、「アプリID URI」で設定した文字列
        • writeやその他も作ったなら、ここに列挙

アカウントリンク設定画面の最下段に「リダイレクト先のURL」として3種類表示されているので、これをコピペしておきます。

Alexa側設定は以上です(Alexaスキルから渡ってきた内容を処理するAzureFunctionとかは必要ですが、今回の記事では割愛)

AADB2Cの全体管理者ユーザーを用意する

利用しようとしているAAD B2Cの、全体管理者ユーザーアカウントを作ります。
注意すべきは、複数のAADに対して全体管理者権限をもつアカウントではなく、このAAD(AAD B2C)の全体管理者権限のみをもつアカウントが必要です。

Azure > ユーザー > 全体管理者権限をつけるユーザーを選択 > ディレクトリロール > ロールの追加 > 全体管理者 を選択。

Microsoft Graph エクスプローラーでredirectURLを追加

さあ、最後の仕上げ。
https://developer.microsoft.com/ja-jp/graph/graph-explorer
というサイトにアクセスします。

サイトの右上にもサインインがありますが、今回は赤枠の部分でサインインします。アカウントは上記でAAD B2Cの全体管理者としたユーザーです。

ここで「アクセス許可の修正」を押し、少なくとも次の「Directory.AccessAsUser.All」「Directory.ReadWrite.All」にチェックをつけてアクセス許可の修正を押します。

もう一度同じ全体管理者でサインインします。アクセス許可の修正欄が更新されていたら成功です。

現状確認

サイトの右側で、”GET” “beta” を選択し、URLに
https://graph.microsoft.com/beta/applications/
と書いて「クエリの実行」してみましょう。成功すると、AAD B2Cに登録しているアプリケーションの設定一覧JSONが返ってきます。

沢山登録していると探すのが大変なので、AlexaSkills設定に書いたアプリケーションIDを書き足してもう一度クエリしてみましょう。
https://graph.microsoft.com/beta/applications/<application-id>

https://localhost と設定したリダイレクトURLが取れました。

修正

これを変更します。
「GET」のドロップダウンリストから「PATCH」に変更します。
そしてリクエスト本文に、JSON形式でAlexaスキルの複数URLを記載します。

そしてクエリを実行し、成功すると書き換わっています。(下記の例ではデタラメURL)

Azureポータルに戻ってみてみると、設定されていてかつ設定不可として怒られている状態になっています。しかし設定としては正しく入力できているようです(MSお墨付き)。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です