こんにちは、富士榮です。
昨年10月に公表されてから時間が経ってしまいましたが、Azure Active Directory(Azure AD)でマイクロソフト純正の多要素認証プロバイダ(いわゆる買収したPhoneFactorですね)ではなく、サードパーティの多要素認証プロバイダ(今のところ、RSA、Duo、Trusonaの3社)を使って多要素認証が出来るようになっています。(現在、Preview)
※ちなみにAzure AD Premium P2のライセンスが必要な機能です。高いので私はトライアル版を使っています。
公式ブログ
Azure AD + 3rd party MFA = Azure AD Custom Controls
https://blogs.technet.microsoft.com/cbernier/2017/10/16/azure-ad-3rd-party-mfa-azure-ad-custom-controls/
ようやく試してみましたので、簡単に紹介して行きます。
ちなみに今回はDuoを試してみました。
(RSAはトライアル版がなかったのと、Trusonaは個別に設定をしてもらわないとダメらしく断念しました)
後、ちなみに自前でカスタムMFAプロバイダを作ってAzure ADと連携させるってこともプロトコル上は可能になっていますが、現状はマイクロソフトに承認を受けたプロバイダしか登録が出来ないということなので、こちらはもし調整がついたらやってみたいと思います。
では早速。
◆Duoのアカウントを作る
まずはココからです。
Duoのサイトへアクセスし、右上にあるStart Trialをクリックすると無償トライアルへのサインアップが出来ます。
登録を進めると、アカウントのアクティベーションを行う場面が出てきます。
ここではDuo MobileというモバイルアプリをインストールしてQRコードを読み込む必要があります。
早速インストールしてADD AccountでQRコードを読み込みます。
うまく追加できるとこんな感じでアカウントが表示されます。
横道にそれますがDuo Mobileは端末の状態を確認して問題があると警告を出してくれます。問題があると画面の下部に表示されるのでFix Nowをタップすると詳細が見れます。
今回はiOSが最新でない、という警告でした。他にもTouch IDが有効になっているか、とか脱獄していないか、などについて確認が行われます。
なんだかんだでセットアップが完了するとDuoの管理コンソールへたどり着きます。
ひとまずこれでDuoのアカウント作成は完了です。
◆Azure ADと接続するためのアプリケーション設定を行う
ややこしいんですが、Azure ADから見てDuoはIdentity Providerです。ということは、Duoから見るとAzure ADはRP、つまりアプリケーション(OAuthクライアント)となります。
(ちなみにAzure ADとDuoの間はOpenID Connectで繋がります)
ということで、Duo上にAzure ADをアプリケーションとして登録する必要があるのですが、DuoではプリセットでAzure ADと接続するための設定が入っていますので、こちらのテンプレートを使っていけば非常に簡単にセットアップが出来ます。
アプリケーションの検索画面に「Microsoft」とキーワードを入れるとAD FSやOWAなどと共にAzure ADが出てきますので、こちらを選択します。
アプリケーション設定画面に行くとシンプルに「Authorize」というボタンが現れますので、こちらをクリックしていきます。
するとAzure ADのログイン画面が出てきますので、管理者でログインします。するとAzure ADのディレクトリへの読み取り権限などを要求されるので認可を行います。
ちなみに、DuoでMFAしてログインする通常の流れにおいてはDuoがIdP、Azure ADがRPという構成ですが、ここではディレクトリの情報を読み出すためにDuoがRP、Azure ADがIdPという構成になります。ややこしいですね。
上手くいくと、Duoの管理画面にAzure ADに設定するための構成情報(json)が表示されます。
ここで表示されるjsonは後でAzure AD側に設定するのでコピーしておきます。
これでDuo側の設定は完了です。
非常にシンプルです。
◆Azure AD側にDuoをカスタムMFAプロバイダとして登録する
DuoのようなカスタムMFAプロバイダは条件付きアクセスの一つの条件として扱われます。そのため、設定は条件付きアクセスの中のCustom controlsというメニューから行います。(Azure AD Premium P2のライセンスが割り当たっていないとこのメニューは出てきません)
ここでNew custom controlをクリックすると、いきなり巨大なテキストボックスが現れるので、先ほどのjsonを貼り付けてCreateをクリックします。
これで完了です。
上手くいけば、こんな感じで一覧にDuoが出てきます。
後は、普通の条件付きアクセスと同じです。
ポリシーを書く時のControlとしてDuoMFAを要求する、という形で設定すると条件に当てはまったアクセスだとDuoのMFAが要求されます。
◆テストしてみる
ポリシーの作成が終わったら念のためポリシーの適用が正しく行われるか確認してみます。
※事前に確認するには先日紹介したWhat Ifを使うと便利です。
http://idmlab.eidentity.jp/2018/01/azure-adwhat-if.html
該当のユーザでの初回アクセスだとMFA設定を促されますので、画面に従いMFA設定を進めます。
利用するMFAの方法を選択します。
モバイルを選択したので、携帯の番号は入れさせられます。この辺りはAzure AD純正のMFAと一緒ですね。
何故かモバイルの種類を選択させられます。アプリのインストールを促すためでしょう。
既にインストール済みなのでI have Duo mobile installedを選んでスキップします。
ここでようやくQRコードが出てくるので先ほど管理者がやったのと同じくアプリを使ってアクティベーションを行います。
上手くアクティベーションが終わると、認証の方法を指定します。
毎回方法を聞いてくるか、PUSH通知 or ワンタイムコードの表示をあらかじめ指定しておくことが出来ます。
ここでは毎回方法を聞いてくるように指定しました。
ここで設定が終わったので、ようやく実際のMFAです。(次からはこの画面がスタート地点になります)
毎回聞いてくるように指定をしたので、方法を選択する画面が表示されます。
PUSHを選択するとモバイルアプリに通知がされてきます。
この辺りは純正と同じですね。
ここでApproveをするとログインが完了します。
◆補足(id_token_hintの利用について)
ちなみに、アプリ⇒Azure AD⇒Duoという流れでFederationが連鎖している状態でのMFAをやろうと思うと、セッション管理をちゃんと実施しないといけません。通常はAzure ADのIdPがDuo、という構成だとDuoで認証されたらそのままAzure ADでも認証されたことにしてしまうためです。
Azure ADが外部MFAプロバイダ連携をする際、セッションをコントロールするためにid_token_hintというものを使っています。
OpenID Connect coreのスペックではid_token_hintについて以下のように記載されています。
Authorization Server が以前発行した ID Token. Client が認証した End-User の現在もしくは過去のセッションに関するヒントとして利用される. もしこの ID Token に紐づく End-User が認証済, もしくはこのリクエスト中で認証された場合, Authorization Server はポジティブレスポンスを返す. さもなければ, Authorization Server は login_required のようなエラーを返す (SHOULD).
つまり、最初にAzure ADでID/PWDで認証された結果の情報をid_token_hintに入れた状態でDuoへ渡し、Duoで追加の認証が上手く行われたらポジティブレスポンス(何を返すか、についてはjsonの中に書いてある通りで、Duoの場合はMfaDoneというメッセージを返します)をAzure ADへ返します。
Azure ADからDuoへPOSTされるid_token_hint。認証されたユーザの情報が入っています。
これに対してDuoからの返事となるid_token。成功したのでMfaDoneが返っています。
細かくはスペックを読みましょう。
http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html