前回の投稿「Windows Azure Active Directoryのアプリケーション連携」では、Windows Azure Active Directory(Azure AD)のアプリケーション連携機能について紹介させていただき、Azure ADに一回サインインするだけで、様々なアプリケーションにアクセスできるようになるシングルサインオン機能を紹介しました。
そのときにAzure ADのアプリケーション連携には2つのシングルサインオンがあることを紹介しました。
・フェデレーションベースのシングルサインオン
ADFSでもおなじみのID連携機能を利用してシングルサインオンを実現する方法で、Azure ADにサインインすることによって生成されるトークンを利用し、様々なアプリケーションにアクセスする方法です。Office365に代表される実装方法です。
・パスワードベースのシングルサインオン
アクセスしたいアプリケーションのユーザー名とパスワードをあらかじめAzure ADに登録しておき、Azure AD経由で各アプリケーションにアクセスするときに、格納しておいたユーザー名とパスワードを自動的に利用する方法です。
この方法は厳密には「シングルサインオン」とは言いませんが、今回紹介する機能の中では多くのアプリケーションがこの連携方法で実現します。
そして、パスワードベースのシングルサインオンは見た目はシングルサインオンだけど、実態はユーザー名とパスワードをキャッシュしているだけの「シングルサインオン風」だということを解説しました。
今度はきちんとシングルサインオンを実現する、フェデレーションベースのシングルサインオンによるアプリケーション連携を紹介したいと思います。
■ ■ ■
ここではAzure ADにサインインし、その後Google Appsにアクセスするというシナリオで実装していきます。フェデレーションベースのシングルサインオンのステップは次のとおりです。
1.Windows Azureを契約する
2.Windows Azure Active Directoryテナントを作成する
3.Application Access Enhancements機能を有効にする
4.Azure ADからシングルサインオンで使用するドメインを定義する
5.Google Appsの初期設定を行う
6.連携するアプリケーションを追加する
7.アプリケーション間のID連携を設定する
8.Azure ADアカウントの作成
これらの手順のうち、1.~3.は前回と同じ手順ですので、手順4.から順番に紹介したいと思います。
Azure ADからシングルサインオンで使用するドメインを定義する
AzureポータルサイトからWindows Azure ADドメインを選択し、画面上部のリンクリストから[ドメイン]を選択すると、次の画面が表示されるので、[カスタムドメインの追加]をクリックして、シングルサインオン用のドメインを追加します。
続く画面でドメイン名を指定し、
最後の画面で表示されるTXTレコードをドメインのDNSサーバーに登録し、[確認]をクリックします。
DNSサーバーでドメイン名を確認できたら、完了ボタンをクリックしてAzure ADへのドメインの登録は完了です。この後、登録したドメイン名を選択し、[プライマリの変更]をクリックして、登録したドメイン名をAzure ADで優先して利用するように構成しておきます。
Google Appsの初期設定を行う
次はGoogle Appsの初期設定です。
Google Appsのテナントを新規に契約し、ポータルサイトにアクセスしたら、Google AppsでもAzure ADに登録したドメイン名を登録します。ポータルサイトから[ドメイン]をクリックします。
[カスタムドメインを追加できます]をクリックして、ドメインを追加します。。
[既にお持ちのドメイン名を使用]をクリックします。
ドメイン名を入力して次へ進みます。画面にはないのですが、この後、TXTレコードが表示されるので、その情報をドメインのDNSサーバーに登録します。
ここまでの作業が完了すると、ドメインが登録され、プライマリドメインになっていることが確認できます。
今回の作業手順はここまでですが、Google Appsでメールを利用する場合には画面の指示に従って、MXレコードの登録も一緒に行います。
連携するアプリケーションを定義する
今度はAzureポータルに戻って、連携するアプリケーションを設定します。
前の画面から[アプリケーション]をクリックし、[追加]をクリックします。
[組織で使用するアプリケーションを追加]をクリックします。
アプリケーションの一覧からGoogle Appsを今回は選択します。
ここまでの設定でAzure ADに連携するアプリケーションとしてGoogle Appsが追加できました。
アプリケーション間のID連携を設定する
今度は今回の設定で最も重要なID連携の設定です。
まずは前の手順が完了すると下の画面が表示されるので、[シングルサインオンの構成]をクリックします。
[ユーザーはWindows Azure ADのアカウントを使用して認証]をクリックします。
アプリケーションURLには、Google AppsにサインインするときにアクセスするURLを入力します。Google Appsの場合、https://www.google.com/a/<ドメイン名>となります。
ここまでの設定で、[Google Appsでのシングルサインオンの構成]が表示されるので、証明書のダウンロードと各URLをコピーしておきます。
証明書がダウンロードできない時の対処法
私の環境では、証明書のダウンロードリンクから証明書がダウンロードできないという現象が起きました。ここで取得する証明書とは、Azure ADドメインがID連携を行うときに使うトークン署名証明書のことなので、Azure ADドメインを作成すると、他のID連携用に自動的に公開されるフェデレーションメタデータと呼ばれるXMLファイルから証明書の情報を取り出す方法で対処しました。(というアイディアをMVPふじえさんに教えてもらいました。Thanks!)
フェデレーションメタデータはhttps://login.windows.net/<Azure ADドメイン名>/Federationmetadata/2007-06/Federationmetadata.xmlから取得できるので、取得したXMLファイルから<X509Certificate>から</X509Certificate>までの部分をコピーしてメモ帳に張り付け、
先頭行に—–BEGIN CERTIFICATE—–
最終行に—–END CERTIFICATE—–
をそれぞれくっつけます。
最後に、拡張子を.cerで保存すれば証明書ファイルの出来上がりです。
Google Appsの画面に戻ります。管理コンソールから[セキュリティ]にアクセスし、
[詳細設定]-[シングルサインオンの構成]をクリックします。
[シングルサインオンの設定]画面では、[シングルサインオンを有効にする]にチェックをつけ、各URLにAzureポータルでコピーしたURLを入れます。また、証明書にはAzureポータルからダウンロードした証明書をアップロードします。(URLのコピーよりも先に証明書をアップロードすることをお勧めします)
すべての作業が完了したら、[セキュリティ]の画面に戻るので、今度は[APIリファレンス]-[APIアクセスを有効にする]の順にクリックします。[変更を保存]をクリックすることもお忘れなく。
ここまでの設定で、ID連携のための設定は完了です。
最後のAPIアクセスはAzureポータルで作られたユーザーアカウントがGoogle Appsにも自動的に作られるようにするために使用します。
Google Appsへの自動プロビジョニングの設定
Google AppsへのサインインにはAzureだけでなく、Google Appsにも同じ名前のユーザーアカウントが作られている必要があります。そこで、Azureからユーザーを作成したら、Google Appsにも作られるように自動プロビジョニングの設定を行います。
Azureポータルの画面に戻って、[ユーザープロビジョニングの構成]をクリックします。
次はGoogle Appsの初期設定です。
Azure ADアカウントの作成
続いてAzure ADユーザーアカウントを作成します。Azureポータルの左側[Active Directory]から画面中央のディレクトリをクリックし、
続く画面で[ユーザーの追加]をクリックします。
ユーザー名と@以降のドメイン名(登録したドメイン名)を選択し、
表示名などを指定して、
一時パスワードを作成して、初期パスワードを確認しておきます。
ここまででユーザー作成は完了です。再び、Azureポータルの左側[Active Directory]から画面中央のディレクトリをクリックし、
続く画面で、画面上部の[アプリケーション]をクリックします。
アプリケーションの一覧からGoogle Appsをクリックすると、下の画面が表示されるので、次は[ユーザーの割り当て]をクリックします。
前の手順で作成したユーザーなどが表示されるので、Google Appsにシングルサインオンしたいユーザーを選択して、[アカウントの有効化]をクリックします。
すると、[有効化されたアクセス]の欄が[はい]に変わります。
ここまで完了すると、Google Appsにもユーザーが作成されています。ただし、現在の仕様?ではGoogle Appsの「停止されたユーザー」というところに入ってしまい、ユーザーアカウントを有効化する設定がGoogle Apps側で必要になります。なので、Google Apps側で最初から同じ名前のユーザーを作ったほうが早いかもしれません。(少なくとも今の時点では、私はそう思いました。それとも回避策があるのかな??)
テスト
すべての手順が完了しました。早速テストしてみましょう。
前回紹介したAzureのポータルサイトにAzure ADアカウントとパスワードを入力して、サインインし、Google Appsをクリックすると、
最初だけ、こんな画面が出てきましたが、[同意します。続けてアカウントを使用します。]をクリックすると、
Google Appsのユーザー名とパスワードを入れないで、Google Appsにアクセスできました。
フェデレーションベースのサインインこそ、本物のシングルサインオン
今回はフェデレーションベースのシングルサインオンを使って、Azure ADアカウントでGoogle Appsにアクセスする方法を見てもらいましたが、パスワードベースのシングルサインオンと違って、どこかにパスワードをキャッシュしているわけではありません。そのため、余計なパスワード管理が不要ですし、何よりも安全に様々なアプリケーションにアクセスできるというメリットがあります。
残念ながら、現段階ではOffice365、Google Appsなど一部のアプリケーションでしか、フェデレーションベースのシングルサインオンは実装できませんが、ID連携によるシングルサインオンによってアクセスできるクラウドアプリケーションが増えてきている現状を考えれば、もっとAzureのアプリケーション連携は使えるアプリケーションも増えるようになるのではないかと思います。