Azure Service BusとLogicアプリの作成

はじめに

Service BusとLogicアプリを利用して、アカウント申請の自動化を試します。図のようにサイトをはじめて訪れた時はまずAzure AD B2Cにサインインをする。サインイン後には利用開始の依頼をメッセージキューに送ります。キューはロジックアプリに監視されていて、依頼があったら承認者へメールを送信します。アカウントの承認(シーン2)も同様の構造とし、承認イベントをキューに溜めたのちにLogicアプリで実処理をします。

実装方針としては、

  1. アカウント管理は、Azure AD B2C
  2. Webアプリは、Azure Web Apps + Node.js
  3. フローは、Azure Logicアプリ
  4. コーディングは極力せずに、GUIの設定で済ます

環境構築

AD B2C環境Webアプリは、こちらのリンクのように既に構築済みを想定している。

Service Busの作成

まずはキューの親となるService Busを作成します。既存のリソースグループを選択し、名前をつけて「確認および作成」ボタンを押す。

「作成」ボタンを押すと数秒で作成が完了する。

このService Busにアクセスするには接続文字列が必要になる訳だが、以下の共有アクセスポリシーからコピーすることができる。

この接続文字列は以下のようにwebアプリでコネクションを開始する時や、ロジックアプリでキューを操作するときに必要になります。

const sbClient = ServiceBusClient.createFromConnectionString(’接続文字列’);
  if (!(sbClient instanceof ServiceBusClient)) {
    return false;
  }
}

キューの作成

Service Busに2つのキュー(利用開始と承認処理)を作成する。キューの名前、サイズ、TTLを入力して作成ボタンを押す。

Logic アプリの作成

次に申請や承認のワークフローとなるLogicアプリを作成する。


Logic Apps デザイナー

まずLogicアプリからService Busへ接続するためのAPIを作成する必要があります。

APIにService Busの場所を教えてあげる必要があるので、先ほどの接続文字列を設定します。

作成するワークフロー全体は以下です。特に分岐処理やピークロックなど考えず、キューからメッセージを取り出し、利用者の情報を取得し、メールを送信してアカウント情報の更新するだけです。

それぞれのLogicアプリ構成要素については、こちらに記載しています。

Graph APIの利用

ユーザのアカウントを管理するにあたりMicrosoft Graph APIを利用します。今回はプログラムからではなく、LogicアプリからRESTを投げてユーザ属性を更新します。

まずは、GrapAPIにAD B2Cのアカウント操作権限を与えます。

権限はWebアプリに与えるので「アプリケーションの許可」を選択する。とりあえず付与権限は読み書きすべて与える。

権限をアプリに与えるため認可します。

このアプリにクライアントシークレットを作成します。「証明書とシークレット」から「新しいクライアントシークレット」「追加」ボタンを押します。

作成されたパスワード(client_secret)を控えておきます。APIを利用するにはこのパスワードとWebアプリのアプリケーションID(client_id)が必要になります。

以上でGraph APIの設定は終わりです。ちなみにREST Clientから直接投げてもADを更新できます。

Access Tokenの取得

まず、認可エンドポイントにPOSTしてアクセストークンを取得します。

POST https://login.microsoftonline.com/<テナントID>/oauth2/v2.0/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

client_id: <AD B2Cにて登録したWebアプリのID>
client_secret: <AD B2Cにて登録したシークレット>
grant_type: client_credentials
scope: https://graph.microsoft.com/.default

ユーザ属性の更新

次に、取得したアクセストークンをAuthorizationヘッダーに含めPATCHすれば指定ユーザの属性を更新できます。成功した場合は204 No contentが返ってきます。

PATCH https://graph.microsoftonline.com/v1.0/users/<ユーザID> HTTP/1.1
Authorization: Bearer <Access Token>
Content-Type: application/json

{
  "<属性名>": "<更新する値>"
}

タイトルとURLをコピーしました