対象読者
- Windows Azureに興味がある方
- Windows Azure Active Directoryに興味がある方
必要な環境
- Windows Azureサブスクリプション
- Microsoft Visual Studio 2013
- .NET Framework 4.5以上
Windows Azure Active Directoryとは
Windows Azure Active Directory(以下、WA AD)は、認証と認可を提供するサービスです。Active Directoryというと、従来のWindows Server Active Directoryを連想される方が多いと思いますが、WA ADは、従来のActive Directoryにおけるドメインサービス、その中でもアイデンティティ管理の部分に特化した機能と言ってよいでしょう。また、ユーザ情報へのアクセスやユーザ認証に利用されていたプロトコルであるLDAPやKerberosなどに代わり、WA ADではREST APIやSAML-P、WS-Federationなどのプロトコルを採用しています。
こう書くと全く異なるもののように聞こえるかもしれませんが、既存のADとWA ADのディレクトリサービスを同期させて(*1)、グループやユーザ情報をクラウド側に保持することなども可能です。
それでは、それぞれの機能について、紹介していきます。WA ADは、大きくは2つのサービスから構成されています。
- アクセスコントロールサービス
- ディレクトリサービス
アクセスコントロールサービスは、ADをはじめ、GoogleやFacebookなどのユーザ情報を所持/提供する機構(Identity Provider)と、提供されたユーザ情報を利用するアプリケーションやサービス(Relying Party)を仲介する機能です。
図1の通り、Identity Providerごとのプロトコルの差分を吸収し、統一のプロトコルでアプリケーションにユーザ情報を提供します。そのため、アプリケーション側では、連携したいIdentity Providerごとに個別設定を行う必要がありません。また、新たなIdentity Providerと連携する場合にも、アクセスコントロールサービスが対応していれば、すぐに利用可能となります。
2つめのディレクトリサービスとは、ユーザ情報を保持/提供する機能と認証サーバの役割を持っています。ユーザ情報を保持/提供しているという意味では、アクセスコントロールの紹介の中で記載した、GoogleやFacebookなどと同様にIdentity Providerとして考えられます。
また、ディレクトリサービスでは多要素認証に対応しています。通常のID/パスワード認証方法に加えて、ワンタイムパスワードなどのモバイルアプリケーション/電話/テキストメッセージなどにより、セキュリティ強化を実現しています。
![図2:ディレクトリサービス](http://cz-cdn.shoeisha.jp/static/images/article/7608/7608_02a.gif)
ディレクトリサービスの操作には、Windows Azure Active Directory Graph(以下、Graph)およびWindows Azure Active Directory Authentication Library(以下、ADAL)が用意されています。
Graphは、Windows Server Active Directoryに対して、ADSIやADO.NETを利用してプログラムからユーザ情報の操作していたのと同様に、REST APIのエンドポイントを利用して、ユーザやグループ情報に対して、プログラムから生成・読み込み・変更・削除(CRUD操作)操作を行う際に利用します。
一方、ADALは、オンプレミスまはたクラウドのActive Directoryに対して、簡易かつ安全に認証やアクセストークンを取得するためのライブラリです。現時点では、.NET Framework/Windowsストアアプリ/Node.js用のライブラリが用意されています。
それでは、WA ADの機能を用いたサンプルアプリケーションを作成してみましょう。
サンプル1 アプリケーションへのSSO実装手順
以下では、ディレクトリサービスを使って自作アプリケーションへのシングルサインオンを実装する手順を紹介します。
前提条件
- Windows Azure SQL Databaseにて、空のデータベースを作成済みであること。今回のサンプルでは、Webエディション、最大1GBのデータベースを利用します。
- Windows Azure Webサイトにて、空のWebサイトを作成しておくこと
手順
[1]ディレクトリサービスの新規作成
Windows Azure管理ポータルから、[新規]->[アプリケーションサービス]->[ACTIVE DIRECTORY]->[ディレクトリ]->[カスタム作成]を選択します。
[ディレクトリ追加]画面にて、以下の項目を入力した上でチェックボタンを押下し、図5のように新規ディレクトリが作成できていることを確認します。
- [ディレクトリ]欄:[新しいディレクトリの作成]を選択
- [名前]欄:任意の名前を設定
- [ドメイン名]欄:任意の名前を設定
- [国/リージョン]欄:ディレクトリサービスの利用対象国を選択
[2]ディレクトリの管理者の追加
手順1で作成したディレクトリサービスを選択し、[ユーザー]タブから[ユーザーの追加]ボタンを押下します。
[このユーザーに関する情報の入力]画面にて、以下の項目を入力した上でチェックボタンを押下し、図7のように一時パスワード設定画面が表示されることを確認します。なお、この一時パスワードは後述の手順で使用するため、メールでパスワードを送信するか、どこかに保存しておいてください。
- [ユーザーの種類]欄:[組織内の新しいユーザー]を選択
- [ユーザー名]欄:任意のユーザー名を設定。ドメイン名に関しては、手順1で作成したドメイン名になっていることを確認
- [名]欄:任意の名前を設定
- [姓]欄:任意の名前を設定
- [表示名]欄:任意の名前を設定
- [ロール]欄:[全体管理者]を選択
- [連絡用メールアドレス]欄:管理者用のメールアドレスを設定
- [多要素認証]チェックボックス:管理者に関しても多要素認証を有効にする場合には、有効にする。今回は無効のままとする
[3]新規プロジェクトの作成
Visual Studioを起動して、メニューバーから[FILE]->[New]->[Project]を選択します。[New Project]画面の左ペインから、[Installed]->[Visual C#]->[Web]を選択し、右ペインに表示された[ASP.NET Web Application]をクリックします。以下の項目を入力し、[OK]ボタンを押下します。
- [Name]欄:任意の名前を設定
- [Location]欄:任意のパスを設定
- [Solution name]欄:任意の名前を設定
図8のように[New ASP.NET Project]画面から、[Change Authentication]ボタンを押下すると、[Change Authentication]画面が表示されるので、[Organizational Accounts]ラジオボタンを選択すると、右ペインが図9の通り表示されるので、以下の項目を入力し、[OK]ボタンを押下します。
- [Name]欄:認証対象を設定。今回は[Cloud - Single Organization]を選択する
- [Domain]欄:手順1で作成したドメイン名を設定
- [Access Level]欄:ディレクトリサービスへの操作レベルを指定。今回は[Single Sign On]を選択する
入力が完了すると、ディレクトリサービスへのサインイン画面が表示されるので、手順2で作成したディレクトリに対する管理者のIDと一時パスワードを入力します。
サインインが成功すると、図11のように[パスワードの変更]画面が表示されるので、任意のパスワードを設定してください。
管理者に対する新規パスワード設定が完了すると、[Chage Authentication]画面に戻るので[OK]ボタンを押下、[New ASP.NET Project]画面に戻り、再度[OK]ボタンを押下します。
[4]アカウント情報の保存先の変更
プロジェクトが作成されたら、プロジェクト内から[Web.config]を開きます。既定の設定では、SQL Server Express LocalDBへユーザ情報を格納する設定になっていますので、これをリスト1のようにWindows Azure SQL Databaseの設定に変更します。
<configuration> <connectionStrings> <add name="DefaultConnection" connectionString="Data Source=tcp:<サーバ名>.database.windows.net,1433;Initial Catalog=<データベース名>;Integrated Security=False; User Id=<ユーザ名>@<サーバ名>;Password=<パスワード>;Encrypt=True;TrustServerCertificate=False;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
[5]Webサイトへの発行準備
図12のようにWebサイトのダッシュボードから、[発行プロファイルのダウンロード]を押下して、Webサイトへの発行のためのプロファイルを取得、適当なパスに保存します。
プロファイルの保存が完了したら、Visual Studioに戻り、プロジェクトを右クリック、[Publish]を選択します。
[Publish Web]画面が表示されたら、[Import]ボタンを押下して、[Import Publish Settings]画面->[Import from a publish profile file]->[Browse]ボタンを押下して、先ほどダウンロードしたWebサイトへの発行のためのプロファイルを指定します。
![図13:発行プロファイルの指定](http://cz-cdn.shoeisha.jp/static/images/article/7608/7608_13a.jpg)
発行プロファイルが読み込まれると、Webサイトに関する情報が自動補完されます。[Connection]ページの[Validate Connection]ボタンを押下して、正しくWebサイトと通信できているかを確認しておきましょう。[Next]ボタンを押下すると、[Settings]ページに遷移します。図14のように[Web.config]ファイルにて指定した内容が自動補完されます。[Databases]->[DefaultConnection]欄が空白になっているので、図15のようにプルダウンから適当なものを選択します。
[Next]ボタンを押下し、[Preview]ページから、[Publish]ボタンを押下します。Webサイトへの発行が始まると、再度ディレクトリ管理者のパスワード入力が求められますので、入力を行ってください。
[6]WebサイトへのSSO
Webサイトへの発行が完了すると、自動でIEが立ち上がり、WebサイトへSSOが実行されます。なお、Windows Azure管理ポータルなどへログインしたままの場合にはログイン失敗の表示がされますので、手順2で作成した管理者での再ログインします。
ログインが成功すると、図18のように右上にユーザ名が表示されたWebページが立ち上がります。
サンプル2 多要素認証の有効化
以下では、ディレクトリサービスにおける多要素認証を有効化する手順を紹介します。
前提条件
- WA ADにて、ディレクトリが作成済みであること
- Windows Azure Webサイトにて、ディレクトリサービスとSSO可能なプリケーションを作成しておくこと
今回は、1つめのサンプルで作成したディレクトリサービス、アプリケーションを利用します。
手順
[1]多要素認証を有効にしたユーザの作成
サンプル1の手順2で作成したのと同様に新規ユーザを作成します。この際、図19の画面で以下の項目を選択してください。
- [ロール]欄:[ユーザー]を選択
- [多要素認証]チェックボックス:有効にするため、チェックを選択
[2]多要素認証の実施
ユーザの作成が完了したら、先述したSSOのサンプルで作成したWebサイトにアクセスします。管理者を作成した際と同様にサインイン画面が表示されるので、[別のアカウントを使用する]リンクを選択して、手順1で作成したユーザと一時パスワードでサインインします。
サインインが成功すると[パスワードの変更]画面が表示されるので、一時パスワードから適当なパスワードに変更し、[送信]ボタンを押下します。
パスワードの変更が完了すると、次に多要素認証が開始されます。図21の通り、[今すぐセットアップ]ボタンを押下すると、[追加のセキュリティ確認 手順1:既定で使用する連絡方法を指定する]画面が表示されます。
[追加のセキュリティ確認 手順1:既定で使用する連絡方法を指定する]画面で以下の項目を入力し、[次へ]ボタンを押下します。
- [認証手段]欄:[携帯電話]、[会社電話]、[モバイルアプリケーション]の中から適当なものを選択。今回は[携帯電話]を指定
- [国/地域]欄:選択した認証手段(今回は携帯電話)の契約している国や地域を選択。今回は[日本(+81)]を指定
- [テキストボックス]:認証に利用する電話番号を設定
- [モード]欄:SMSを利用した[テキストメッセージでコードを送信する]もしくは[電話]による認証を選択する。今回はSMSを指定
認証方法の指定が完了すると、[追加のセキュリティ確認 手順2:こちらからお客様の携帯電話に連絡する]画面で[今すぐ確認]ボタンを押下します。しばらくすると携帯電話に図23のようなSMSが届くので、そこに記載された6桁のコードを、図24のように入力し、[確認]ボタンを押下します。認証が完了したら、[次へ]ボタンを押下します。
[追加のセキュリティ確認 手順3:Microsoft Officeなどのアプリケーションを使用する場合は、このアカウント用の新しいパスワードを指定する]画面で[アプリケーションパスワードの生成]もしくは[これらのアプリケーションにこのアカウントを使用しない]ボタンを選択します。今回はLyncなどのアプリケーションを利用する要件はないため、[これらのアプリケーションにこのアカウントを使用しない]ボタンを押下します。
サインイン画面に戻り、パスワードを入力すると、ユーザと紐づけた認証情報が正しいかを再度確認するために、図26の画面が表示されます。再度、携帯電話に図27のようなSMSが届くので、そこに記載された確認コードを入力し、[サインイン]ボタンを押下します。
すべての認証が完了すると、図28のように右上にユーザ名が表示されたWebページが立ち上がります。
サンプル3 ソーシャルアプリケーションへのSSO
以下では、ディレクトリサービスを用いてソーシャルアプリケーション(Facebook)へのSSO設定をご紹介します。
前提条件
- WA ADにて、ディレクトリが作成済みであること
- WA ADにて、ユーザが作成済みであること
今回は、2つめのサンプルで作成したディレクトリサービス、ユーザを利用します。
手順
[1]SSOで連携するアプリケーションの追加
Windows Azure管理ポータルから、[ACTIVE DIRECTORY]->[(ディレクトリ名)]->[アプリケーション]->[追加]ボタンをを押下します。図29のように、[実行する作業を選択してください。]画面が表示されるので、自身で開発したアプリケーションを登録する場合には、[組織で開発中のアプリケーションを追加]を選択、ソーシャルアプリケーションなどのような他社のアプリケーションと連携する場合には、[組織で使用するアプリケーションを追加]を選択します。今回はFacebookとの連携を行うため、[組織で使用するアプリケーションを追加]を選択してください。
次に、図30のように[組織で使用するアプリケーションを追加]画面で、検索ボックス、または[ソーシャル]カテゴリからFacebookを選択します。
[2]SSOで連携するアプリケーションへのユーザの割り当て
アプリケーションの追加作業が成功すると、ディレクトリサービスのアプリケーション一覧内にFacebookが追加されます。次にこのアプリケーションを利用するユーザを割り当てます。図31のように[Facebook]->[2 ユーザーをFacebookに割り当てる]->[ユーザーの割り当て]ボタンを押下します。
ディレクトリサービスに登録されているユーザの一覧から、割り当てるユーザを選択し、[割り当て]ボタンを押下します。[ユーザーの割り当て]画面にて、[ユーザーの代わりにFacebook資格情報を入力する]にチェックを入れます。
以下の項目が表示されるので、適当な値を入力し、[チェック]ボタンを押下します。割り当てが完了すると、図34のように表示されます。
- [電子メールアドレス]欄:Facecookのログイン時に利用するメールアドレスを設定
- [パスワード]欄:Facecookのログイン時に利用するパスワードを設定
[3]アプリケーションへのサインイン
アプリケーションパネルよりSSO連携するアプリケーションに接続します。アプリケーションパネルに接続すると、サインイン画面が表示されるので、手順2でアプリケーションを割り当てたユーザでサインインします。
正しくアプリケーションの割り当てができていると、図36のように[facebook]タイルが表示されます。[facebook]タイルを選択すると、Facebookのログインページに遷移します。その際、手順2で設定したログイン資格情報が記載された状態であることを確認してください。
認証が完了すると、Facebookへのログインが完了となります。
なお、アプリケーションパネルからSSOでアプリケーションに連携する際に、初回のみ[Access Panel Extension]という拡張機能のインストールを求められます。インストールが完了し、IEを再起動すると、アプリケーションへSSOが可能となります。
![図39:Access Panel Extensionのインストール画面](http://cz-cdn.shoeisha.jp/static/images/article/7608/7608_39a.jpg)
補足
本稿では、アクセスコントロールサービスを用いたソーシャルIDによるアプリケーションへのログインなどの部分はとりあげませんでした。その部分に関しては、Windows Azure Training KitなどにStep by stepで方法が記載されていますので、そちらを参考にしてください。