Help us understand the problem. What is going on with this article?

Power Virtual Agents で認証を組み込む方法 (Azure AD)

※本記事は2019年11月25日現在の情報です。

はじめに

本記事ではPower Virtual Agentsに認証機能を組み込む方法をご紹介します。認証プロバイダーとしてはAzure ADを利用します。基本的には以下のドキュメント通りですが、本記事では補足説明を加えます。

参照: https://docs.microsoft.com/ja-jp/power-virtual-agents/configuration-end-user-authentication

Azure ADへのアプリケーションの登録

1.Azureポータルにアクセスをし、「Azure Active Directory」をクリックしてください。

2.「アプリの登録」メニューから「+ 新規登録」をクリックしてください。

3.アプリケーションの登録を行います。この際のリダイレクトURIは、https://token.botframework.com/.auth/web/redirectとします。
image.png

4.「概要」メニューに表示された「アプリケーション(クライアント)ID」をコピーし、メモ帳等に貼り付けてください。

5.「API のアクセス許可」メニューから「+ アクセス許可の追加」をクリックしてください。

6.「Microsoft Graph」を選択後、「委任されたアクセス許可」を選択してください。

7.アクセス許可リストの中から「openid」にチェックを入れ、「アクセス許可の追加」をクリックしてください。
image.png

8.「証明書とシークレット」メニューから「+ 新しいクライアントシークレット」をクリックし、キーを作成してください。作成されたキーをメモ帳等にコピー&ペーストしてください。キーは一度しか表示されないため、十分に気を付けてください。
image.png

9.「概要」メニューから「エンドポイント」をクリックしてください。

10.「OAuth 2.0 承認エンドポイント (v2)」と「OAuth 2.0 トークン エンドポイント (v2)」をコピーし、メモ帳等に貼り付けてください。

認証情報の設定

1.以下のリンクからPower Virtual Agentsにアクセスしてください。
https://powerva.microsoft.com/

2.サインアップが正常に完了したら任意のボット名を決め、「Create」します。

3.「Manage」メニューの「Authentication」に、認証プロバイダーから取得した情報を入力します。

※Authorization URL Query String Template、Token Body Template、Refresh Body TemplateのDescriptionはそのまま入力してください。{ }で囲まれた部分を値に置き換える必要はありません。

Field name Description
Connection name 任意の名前
Service Provider デフォルトのままでOKです(oauth2generic)
Client ID AADからコピーした値
Client Secret AADからコピーした値
Scope List delimiter 「,」と入力してください
Authorization URL Template OAuth2.0承認エンドポイント(v2)
Authorization URL Query String Template ?client_id={ClientId}&response_type=code&redirect_uri={RedirectUrl}&scope={Scopes}&state={State}
Token URL Template OAuth2.0トークンエンドポイント(v2)
Token URL Query String Template 「?」と入力してください
Token Body Template code={Code}&grant_type=authorization_code&redirect_uri={RedirectUrl}&client_id={ClientId}&client_secret={ClientSecret}
Refresh URL Template OAuth2.0トークンエンドポイント(v2)
Refresh URL Query String Template 「?」と入力してください
Refresh Body Template refresh_token={RefreshToken}&redirect_uri={RedirectUrl}&grant_type=refresh_token&client_id={ClientId}&client_secret={ClientSecret}
Scopes openid

image.png

4.全て入力できたら、最後に「Save」を押してください。

ダイアログへの組み込み

本記事では、Greeting Topicを改造していきます。

1.「Call an action」から「Authenticate」を選択してください。
image.png

※現状、コネクタとコネクタの間には、Authenticateは差し込めないようです。ワークフローの一番最後にアクションを追加する場合にのみ、Autenticateカードが表示されます。

2.Authenticateを選択すると自動的に条件分岐が表示されます。Trueだった場合、Falseだった場合、それぞれ任意のメッセージをつけておきましょう。
image.png

3.ここまで完成したら、最後に画面右上「Save」をクリックしてください。

テスト

1.実験をしてみます。Helloとあいさつを投げると、登録しておいたメッセージが出力され、「Login」ボタンが表示されます。
image.png

2.Loginボタンをクリックすると、ブラウザで別タブが開きます。AADアプリを登録したAADテナントに登録されているアカウントでサインインをし、正常に認証されると、validation codeが表示されます。この数字をコピーします。
image.png

3.コピーしたvalidation codeをボットに入力し、正常に認証されると以下のようになります。
image.png

Webチャットでテスト

Webアプリ上でも正常に動作を確認できました。
image.png

Teamsでテスト

Teamsではログインすると、validation codeなしでチャットセッションが続くようです。
image.png

さいごに

認証プロバイダーから必要な情報さえ得られれば、チャットボットに認証機能を付け加えるのも容易に行えることを確かめられました。ドキュメントの情報によると、チャンネルによって動作が違うとの旨が書かれているので、現状は展開するチャンネルによる挙動の違いを考慮に入れながらワークフローを作っていく必要がありそうです。しかしながら、普段コーディングしない方でも、ここまでノンコーディングで組み込めるPower Virtual Agentsはすごいですね。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away