Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Windows Azure Active Directoryことはじめ

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/03/28 00:00

 本稿では、Office 365、Dynamics CRM OnlineなどMicrosoft社のクラウドサービスの認証基盤としても利用されているWindows Azure Active Directoryを簡単なサンプルを交えて、紹介していきます。

対象読者

  • 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)、グループやユーザ情報をクラウド側に保持することなども可能です。

*1

 現時点では、オンプレミスのADからWA ADへの一方向の同期のみが機能として提供されています。

 それでは、それぞれの機能について、紹介していきます。WA ADは、大きくは2つのサービスから構成されています。

  • アクセスコントロールサービス
  • ディレクトリサービス

 アクセスコントロールサービスは、ADをはじめ、GoogleやFacebookなどのユーザ情報を所持/提供する機構(Identity Provider)と、提供されたユーザ情報を利用するアプリケーションやサービス(Relying Party)を仲介する機能です。

 図1の通り、Identity Providerごとのプロトコルの差分を吸収し、統一のプロトコルでアプリケーションにユーザ情報を提供します。そのため、アプリケーション側では、連携したいIdentity Providerごとに個別設定を行う必要がありません。また、新たなIdentity Providerと連携する場合にも、アクセスコントロールサービスが対応していれば、すぐに利用可能となります。

図1:アクセスコントロールサービス
図1:アクセスコントロールサービス

 2つめのディレクトリサービスとは、ユーザ情報を保持/提供する機能と認証サーバの役割を持っています。ユーザ情報を保持/提供しているという意味では、アクセスコントロールの紹介の中で記載した、GoogleやFacebookなどと同様にIdentity Providerとして考えられます。

 また、ディレクトリサービスでは多要素認証に対応しています。通常のID/パスワード認証方法に加えて、ワンタイムパスワードなどのモバイルアプリケーション/電話/テキストメッセージなどにより、セキュリティ強化を実現しています。

図2:ディレクトリサービス
図2:ディレクトリサービス

 ディレクトリサービスの操作には、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実装手順

 以下では、ディレクトリサービスを使って自作アプリケーションへのシングルサインオンを実装する手順を紹介します。

前提条件

  1. Windows Azure SQL Databaseにて、空のデータベースを作成済みであること。今回のサンプルでは、Webエディション、最大1GBのデータベースを利用します。
  2. Windows Azure Webサイトにて、空のWebサイトを作成しておくこと

手順

[1]ディレクトリサービスの新規作成

 Windows Azure管理ポータルから、[新規]->[アプリケーションサービス]->[ACTIVE DIRECTORY]->[ディレクトリ]->[カスタム作成]を選択します。

図3:ディレクトリサービスの新規作成 その1
図3:ディレクトリサービスの新規作成 その1

 [ディレクトリ追加]画面にて、以下の項目を入力した上でチェックボタンを押下し、図5のように新規ディレクトリが作成できていることを確認します。

  • [ディレクトリ]欄:[新しいディレクトリの作成]を選択
  • [名前]欄:任意の名前を設定
  • [ドメイン名]欄:任意の名前を設定
  • [国/リージョン]欄:ディレクトリサービスの利用対象国を選択
図4:ディレクトリサービスの新規作成 その2
図4:ディレクトリサービスの新規作成 その2
図5:新規に作成されたディレクトリサービス
図5:新規に作成されたディレクトリサービス

[2]ディレクトリの管理者の追加

 手順1で作成したディレクトリサービスを選択し、[ユーザー]タブから[ユーザーの追加]ボタンを押下します。

図6:ユーザーの新規追加
図6:ユーザーの新規追加

 [このユーザーに関する情報の入力]画面にて、以下の項目を入力した上でチェックボタンを押下し、図7のように一時パスワード設定画面が表示されることを確認します。なお、この一時パスワードは後述の手順で使用するため、メールでパスワードを送信するか、どこかに保存しておいてください。

  • [ユーザーの種類]欄:[組織内の新しいユーザー]を選択
  • [ユーザー名]欄:任意のユーザー名を設定。ドメイン名に関しては、手順1で作成したドメイン名になっていることを確認
  • [名]欄:任意の名前を設定
  • [姓]欄:任意の名前を設定
  • [表示名]欄:任意の名前を設定
  • [ロール]欄:[全体管理者]を選択
  • [連絡用メールアドレス]欄:管理者用のメールアドレスを設定
  • [多要素認証]チェックボックス:管理者に関しても多要素認証を有効にする場合には、有効にする。今回は無効のままとする
図7:一時パスワード取得
図7:一時パスワード取得

[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]を選択する
図8:認証方法の変更
図8:認証方法の変更
図9:ディレクトリサービスの指定
図9:ディレクトリサービスの指定

 入力が完了すると、ディレクトリサービスへのサインイン画面が表示されるので、手順2で作成したディレクトリに対する管理者のIDと一時パスワードを入力します。

図10:ディレクトリに対して管理者アカウントでのサインイン
図10:ディレクトリに対して管理者アカウントでのサインイン

 サインインが成功すると、図11のように[パスワードの変更]画面が表示されるので、任意のパスワードを設定してください。

 管理者に対する新規パスワード設定が完了すると、[Chage Authentication]画面に戻るので[OK]ボタンを押下、[New ASP.NET Project]画面に戻り、再度[OK]ボタンを押下します。

図11:ディレクトリに対して管理者アカウントでのサインイン
図11:ディレクトリに対して管理者アカウントでのサインイン

[4]アカウント情報の保存先の変更

 プロジェクトが作成されたら、プロジェクト内から[Web.config]を開きます。既定の設定では、SQL Server Express LocalDBへユーザ情報を格納する設定になっていますので、これをリスト1のようにWindows Azure SQL Databaseの設定に変更します。

[リスト01]Web.config(変更後)
<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サイトへの発行のためのプロファイルを取得、適当なパスに保存します。

図12:発行プロファイルのダウンロード
図12:発行プロファイルのダウンロード

 プロファイルの保存が完了したら、Visual Studioに戻り、プロジェクトを右クリック、[Publish]を選択します。

 [Publish Web]画面が表示されたら、[Import]ボタンを押下して、[Import Publish Settings]画面->[Import from a publish profile file]->[Browse]ボタンを押下して、先ほどダウンロードしたWebサイトへの発行のためのプロファイルを指定します。

図13:発行プロファイルの指定
図13:発行プロファイルの指定

 発行プロファイルが読み込まれると、Webサイトに関する情報が自動補完されます。[Connection]ページの[Validate Connection]ボタンを押下して、正しくWebサイトと通信できているかを確認しておきましょう。[Next]ボタンを押下すると、[Settings]ページに遷移します。図14のように[Web.config]ファイルにて指定した内容が自動補完されます。[Databases]->[DefaultConnection]欄が空白になっているので、図15のようにプルダウンから適当なものを選択します。

図14:ディレクトリへの接続設定
図14:ディレクトリへの接続設定
図15:SQL Databaseへの接続設定
図15:SQL Databaseへの接続設定
図16:設定完了画面
図16:設定完了画面

 [Next]ボタンを押下し、[Preview]ページから、[Publish]ボタンを押下します。Webサイトへの発行が始まると、再度ディレクトリ管理者のパスワード入力が求められますので、入力を行ってください。

[6]WebサイトへのSSO

 Webサイトへの発行が完了すると、自動でIEが立ち上がり、WebサイトへSSOが実行されます。なお、Windows Azure管理ポータルなどへログインしたままの場合にはログイン失敗の表示がされますので、手順2で作成した管理者での再ログインします。

図17:管理者での再ログイン実施画面
図17:管理者での再ログイン実施画面

 ログインが成功すると、図18のように右上にユーザ名が表示されたWebページが立ち上がります。

図18:管理者でのログイン成功した様子
図18:管理者でのログイン成功した様子

サンプル2 多要素認証の有効化

 以下では、ディレクトリサービスにおける多要素認証を有効化する手順を紹介します。

前提条件

  1. WA ADにて、ディレクトリが作成済みであること
  2. Windows Azure Webサイトにて、ディレクトリサービスとSSO可能なプリケーションを作成しておくこと

 今回は、1つめのサンプルで作成したディレクトリサービス、アプリケーションを利用します。

手順

[1]多要素認証を有効にしたユーザの作成

 サンプル1の手順2で作成したのと同様に新規ユーザを作成します。この際、図19の画面で以下の項目を選択してください。

  • [ロール]欄:[ユーザー]を選択
  • [多要素認証]チェックボックス:有効にするため、チェックを選択
図19:多要素認証の有効化画面
図19:多要素認証の有効化画面

[2]多要素認証の実施

 ユーザの作成が完了したら、先述したSSOのサンプルで作成したWebサイトにアクセスします。管理者を作成した際と同様にサインイン画面が表示されるので、[別のアカウントを使用する]リンクを選択して、手順1で作成したユーザと一時パスワードでサインインします。

図20:新規作成したユーザでのサインイン
図20:新規作成したユーザでのサインイン

 サインインが成功すると[パスワードの変更]画面が表示されるので、一時パスワードから適当なパスワードに変更し、[送信]ボタンを押下します。

 パスワードの変更が完了すると、次に多要素認証が開始されます。図21の通り、[今すぐセットアップ]ボタンを押下すると、[追加のセキュリティ確認 手順1:既定で使用する連絡方法を指定する]画面が表示されます。

図21:多要素認証を行うため再度サインイン
図21:多要素認証を行うため再度サインイン

 [追加のセキュリティ確認 手順1:既定で使用する連絡方法を指定する]画面で以下の項目を入力し、[次へ]ボタンを押下します。

  • [認証手段]欄:[携帯電話]、[会社電話]、[モバイルアプリケーション]の中から適当なものを選択。今回は[携帯電話]を指定
  • [国/地域]欄:選択した認証手段(今回は携帯電話)の契約している国や地域を選択。今回は[日本(+81)]を指定
  • [テキストボックス]:認証に利用する電話番号を設定
  • [モード]欄:SMSを利用した[テキストメッセージでコードを送信する]もしくは[電話]による認証を選択する。今回はSMSを指定
図22:認証方法の選択
図22:認証方法の選択

 認証方法の指定が完了すると、[追加のセキュリティ確認 手順2:こちらからお客様の携帯電話に連絡する]画面で[今すぐ確認]ボタンを押下します。しばらくすると携帯電話に図23のようなSMSが届くので、そこに記載された6桁のコードを、図24のように入力し、[確認]ボタンを押下します。認証が完了したら、[次へ]ボタンを押下します。

図23:認証用の確認コード
図23:認証用の確認コード
図24:認証方法の選択
図24:認証方法の選択

 [追加のセキュリティ確認 手順3:Microsoft Officeなどのアプリケーションを使用する場合は、このアカウント用の新しいパスワードを指定する]画面で[アプリケーションパスワードの生成]もしくは[これらのアプリケーションにこのアカウントを使用しない]ボタンを選択します。今回はLyncなどのアプリケーションを利用する要件はないため、[これらのアプリケーションにこのアカウントを使用しない]ボタンを押下します。

図25:追加のパスワード設定要否確認
図25:追加のパスワード設定要否確認

 サインイン画面に戻り、パスワードを入力すると、ユーザと紐づけた認証情報が正しいかを再度確認するために、図26の画面が表示されます。再度、携帯電話に図27のようなSMSが届くので、そこに記載された確認コードを入力し、[サインイン]ボタンを押下します。

図26:再認証
図26:再認証
図27:認証用の確認コード
図27:認証用の確認コード

 すべての認証が完了すると、図28のように右上にユーザ名が表示されたWebページが立ち上がります。

図28:多要素認証を有効にしたユーザでのログインに成功した様子
図28:多要素認証を有効にしたユーザでのログインに成功した様子

サンプル3 ソーシャルアプリケーションへのSSO

 以下では、ディレクトリサービスを用いてソーシャルアプリケーション(Facebook)へのSSO設定をご紹介します。

前提条件

  1. WA ADにて、ディレクトリが作成済みであること
  2. WA ADにて、ユーザが作成済みであること

 今回は、2つめのサンプルで作成したディレクトリサービス、ユーザを利用します。

手順

[1]SSOで連携するアプリケーションの追加

 Windows Azure管理ポータルから、[ACTIVE DIRECTORY]->[(ディレクトリ名)]->[アプリケーション]->[追加]ボタンをを押下します。図29のように、[実行する作業を選択してください。]画面が表示されるので、自身で開発したアプリケーションを登録する場合には、[組織で開発中のアプリケーションを追加]を選択、ソーシャルアプリケーションなどのような他社のアプリケーションと連携する場合には、[組織で使用するアプリケーションを追加]を選択します。今回はFacebookとの連携を行うため、[組織で使用するアプリケーションを追加]を選択してください。

図29:ユーザの新規作成
図29:ユーザの新規作成

 次に、図30のように[組織で使用するアプリケーションを追加]画面で、検索ボックス、または[ソーシャル]カテゴリからFacebookを選択します。

図30:連携するアプリケーションの選択
図30:連携するアプリケーションの選択

[2]SSOで連携するアプリケーションへのユーザの割り当て

 アプリケーションの追加作業が成功すると、ディレクトリサービスのアプリケーション一覧内にFacebookが追加されます。次にこのアプリケーションを利用するユーザを割り当てます。図31のように[Facebook]->[2 ユーザーをFacebookに割り当てる]->[ユーザーの割り当て]ボタンを押下します。

図31:Facebookと連携させるユーザの割り当て
図31:Facebookと連携させるユーザの割り当て

 ディレクトリサービスに登録されているユーザの一覧から、割り当てるユーザを選択し、[割り当て]ボタンを押下します。[ユーザーの割り当て]画面にて、[ユーザーの代わりにFacebook資格情報を入力する]にチェックを入れます。

図32:ユーザ一覧から割り当てるユーザを選択する
図32:ユーザ一覧から割り当てるユーザを選択する

 以下の項目が表示されるので、適当な値を入力し、[チェック]ボタンを押下します。割り当てが完了すると、図34のように表示されます。

  • [電子メールアドレス]欄:Facecookのログイン時に利用するメールアドレスを設定
  • [パスワード]欄:Facecookのログイン時に利用するパスワードを設定
図33:Facebookへのログイン資格情報を入力する
図33:Facebookへのログイン資格情報を入力する
図34:ユーザへの割り当て完了画面
図34:ユーザへの割り当て完了画面

[3]アプリケーションへのサインイン

 アプリケーションパネルよりSSO連携するアプリケーションに接続します。アプリケーションパネルに接続すると、サインイン画面が表示されるので、手順2でアプリケーションを割り当てたユーザでサインインします。

図35:アプリケーションパネルへのサインイン
図35:アプリケーションパネルへのサインイン

 正しくアプリケーションの割り当てができていると、図36のように[facebook]タイルが表示されます。[facebook]タイルを選択すると、Facebookのログインページに遷移します。その際、手順2で設定したログイン資格情報が記載された状態であることを確認してください。

図36:アプリケーションパネルへのサインイン
図36:アプリケーションパネルへのサインイン
図37:Facebookのログインページ
図37:Facebookのログインページ

 認証が完了すると、Facebookへのログインが完了となります。

図38:Facebookへログイン完了画面
図38:Facebookへログイン完了画面

 なお、アプリケーションパネルからSSOでアプリケーションに連携する際に、初回のみ[Access Panel Extension]という拡張機能のインストールを求められます。インストールが完了し、IEを再起動すると、アプリケーションへSSOが可能となります。

図39:Access Panel Extensionのインストール画面
図39:Access Panel Extensionのインストール画面

補足

 本稿では、アクセスコントロールサービスを用いたソーシャルIDによるアプリケーションへのログインなどの部分はとりあげませんでした。その部分に関しては、Windows Azure Training KitなどにStep by stepで方法が記載されていますので、そちらを参考にしてください。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 安東 沙織(アンドウ サオリ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5