[運用]
Windowsで構築する、クラウド・サービスと社内システムのSSO環境
――クラウド時代のアイデンティティ管理とは?――

第4回 クラウド・サービスと社内ADとのSSOを実現する(後)

1.Windows AzureとAD FS 2.0との連携(1)

Microsoft MVP
Identity Lifecycle Manager
伊藤忠テクノソリューションズ株式会社
富士榮 尚寛
2010/11/04
Page1 Page2

クラウド・コンピューティングとアイデンティティ管理の概要
クラウド・コンピューティング時代の認証技術
クラウド・サービスと社内ADとのSSOを実現する(前)
第4回
クラウド・サービスと社内ADとのSSOを実現する(後)

 前回は、AD FS 2.0を利用して、Google AppsやWindows Live IDといったSaaS(Software as a Service)のクラウド・サービスとActive Directoryとのフェデレーション環境を構築する手順を解説した。最終回である今回は、PaaS(Platform as a Service )であるWindows AzureとActive Directoryとのフェデレーションを実現する手順を解説する。またforce.com(PaaS)およびAmazon EC2(Infrastructure as a Service:IaaS)についても参考情報を紹介する。AD FS 2.0のインストールとセットアップについては、前回の記事を参照していただきたい。

[PaaS]Windows Azureとの認証連携

 本稿では、PaaS(Platform as a Service)であるWindows Azure上にWindows Identity Foundation(WIF)を使ったアプリケーションをデプロイ(展開)し、それとActive Directoryの間でシングル・サインオンを実現する。以下、AD FS 2.0との認証連携に関わる部分に焦点を当てて解説する。Windows Azureや Visual Studio、IISなどの基本的な設定方法や使い方については、別の解説記事へのリンクを掲載しているので、そちらをご参照いただきたい。

環境の準備
 まず、Windows Azure上にデプロイするアプリケーションを開発するための環境の準備を行う必要がある。筆者は以下のソフトウェアをインストールした環境を使用した。

  • Windows 7 Ultimate 32bit版
  • IIS 7.5(ASP.NETも有効化しておく)
  • Visual Studio 2010 Premium
  • Windows Identity Foundation(WIF)
  • Windows Identity Foundation SDK
  • Azure Tools for Visual Studio 2010 ver.1.2

 WIFとそのSDK、Azure Toolsのインストーラは、それぞれ以下のマイクロソフト ダウンロード・センターの各ページからダウンロードできる。

 また、AD FS 2.0の認証要求元(リライング・パーティ:RP)はHTTPSのエンドポイントを持つ必要があるので、SSL用に証明書(検証目的なので正規の証明書ではなく自己署名入り証明書でよい)を作成しておく。それには、まず前回の記事で解説した手順でインターネット・インフォメーション・マネージャ(IISマネージャ)から自己署名入り証明書を作成する。次に、作成した証明書を右クリックして[エクスポート]を選び、.pfxファイルにエクスポートしておいていただきたい。

Windows Azure側の設定
 次に、Windows Azure側の準備を整える。アプリケーションのデプロイ方法や、必要となるアフィニティ・グループ(Affinity Group)やストレージ・アカウント、デプロイ用のAPI証明書の設定方法など、Windows Azureの開発の基礎的な部分については、以下のInsider.NETフォーラムの記事を参考にしていただきたい。

 ここでは、フェデレーション環境構築のうえで重要な、実際のアプリケーションをデプロイするホスト・サービスの準備について説明する。

 Internet ExplorerでWindows Azureのサイトへアクセスしたら、Windows Live IDでログインしてサービスを作成する。

Windows Azureのサービスの作成

 今回は下表のようにサービスを設定・作成した。

設定項目 設定値 備考
Service Label sso2azure 任意
Public Service Name http://sso2azure.cloudapp.net  
Affinity Group SSO_TEST 任意
Region Anywhere Asia 任意
Certificates 先ほど作成・エクスポートした証明書(.pfxファイル)  
Windows Azureのサービス作成時の設定

アプリケーションの実装
 では、実際にWindows Azure上にデプロイするアプリケーションを開発してみる。

 まず、Visual Studioを管理者として起動する。AD FS 2.0のSecurity Token Service(STS)を参照するためのWIF SDKのユーティリティ(Visual Studioのアドイン)を動かすために管理者権限が必要なためだ。

 次に、プロジェクトを下表の設定で作成する。

設定項目 設定値
言語 Visual C#
プロジェクト テンプレート Cloud
バージョン .NET Framework 3.5
プロジェクトの名前 sso2azure
Role ASP.NET Web Role
Web ロール名 web_ss02azure
プロジェクトの設定

 次に、作成したWebRoleを下表のように設定する。

設定項目 設定値
参照設定 Microsoft.IdentityModelの追加
プロパティ ローカル コピー True
プロパティ Endpoints HTTP 無効
HTTPS 有効
SSL certificate name sso2azure
以下の[Certificates]−[Name]と同じものを指定)
Certificates Name sso2azure
Store Location LocalMachine
Store Name My
Thumbprint 先ほど作成した証明書
WebRoleの設定

 注意点として、参照設定をしたMicrosoft.IdentityModelのプロパティの[ローカル コピー]を「True」に設定しておく必要がある。これはWindows Azure上にWIFのランタイム・モジュール(DLL)が存在していないので、アプリケーションをデプロイする際にパッケージとして同梱しておく必要があるためだ。

Windows Azure上にWIFをデプロイするための設定
WIFのランタイム・モジュール(DLL)はWindows Azureに含まれていないので、デプロイ対象のアプリケーションに同梱する必要がある。
これを「True」にする。

 次に、アプリケーションがアイデンティティ・プロバイダ(IdP)であるSTSを参照できるようにするための設定を行う。

 Visual Studioの[ツール]−[STS 参照の追加]をクリックすると、フェデレーション・ユーティリティ・ウィザードが起動する。最初の画面では、Windows Azure側で指定したサービス名(要するにRP名)をアプリケーションURIに指定する。ここでの注意点はhttp:ではなくhttps:を指定するという点だ。

アプリケーションURIの指定
ここではサービス名(RP名)である「sso2azure」を加えて「https://sso2azure.cloudapp.net」と指定した。http:ではなくhttps:にしなければならない点に注意する。

 次にSTSの指定を行う画面では

  • 既存のSTSを使う
  • STS WS-Federationメタデータのドキュメント
    https://<IdPのFQDN>/FederationMetadata/2007-06/FederationMetadata.xml

を指定する。

STSの設定
これを選ぶ。
STS WS-Federationメタデータのドキュメントとして「https://<IdPのFQDN>/FederationMetadata/2007-06/FederationMetadata.xml」を指定する。

 ここから実際にアプリケーションのコーディングを行う。今回は、ページが表示された際にSTSから渡されたセキュリティ・トークンの中から、名前(実際にはSTSがマッピングしたActive Directoryのメール・アドレス属性)を取り出して画面上に表示する、というアプリケーションを作ってみる。

 まず、次のように画面上(default.aspxのページ)にラベルを配置する。

default.aspxのデザイン・ビュー
配置したラベル。これがSTSから渡される名前(実際にはActive Directoryのメール・アドレス属性)で置き換えられる。

 次に実際のコードを埋め込む。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.IdentityModel.Claims;
using System.Threading;

namespace web_sso2azure
{
 public partial class _Default : System.Web.UI.Page
 {
  protected void Page_Load(object sender, EventArgs e)
  {
   IClaimsPrincipal icp = (IClaimsPrincipal)Thread.CurrentPrincipal;

   IClaimsIdentity claimsIdentity = (IClaimsIdentity)icp.Identity;

   lbl_id.Text = (from c in claimsIdentity.Claims
     where c.ClaimType == Microsoft.IdentityModel.Claims.ClaimTypes.Name
     select c.Value).Single();

  }
 }
}
埋め込むプログラムのコード
赤枠部分が実際にコーディングした、このアプリケーション固有の部分である。

 以上の作業が完了したらアプリケーションをビルドして、先ほど作成したWindows Azure用のサービスへデプロイを実行する。

Windows Azureへのデプロイ
Windows Azureにおける一般的なデプロイ手順については、Insider.NETの.NET TIPS「[Azure]Windows AzureアプリケーションをVisual Studioからデプロイするには?」を参照していただきたい。
Windows AzureではStaging環境とProduction環境のURLが異なるせいで、フェデレーション時のRPがIdPから別々に見えるため、通常は複数のRPを設定して対応する必要がある。しかし、ここでは挙動の確認が目的なので、あえてProduction環境を指定し、Staging環境は利用しないことで単一のRP設定で済ませている。

 なお、Windows AzureはStaging環境とProduction環境でURLが異なるため、フェデレーションを行う場合、IdPから見ると別々のRPに見えてしまう。通常はIdP側に複数のRPを設定して対応することになるのだが、本稿では挙動を確認するのが目的なので、Staging環境は利用せずに直接Production環境にデプロイを行う設定をしている。


 INDEX
  [運用]Windowsで構築する、クラウド・サービスと社内システムのSSO環境
  第1回 クラウド・コンピューティングとアイデンティティ管理の概要
    1.クラウド・コンピューティングの基礎と課題
    2.クラウドでのセキュリティ対策とアイデンティティ管理の役割
    3.クラウドがアイデンティティ管理システムにもたらす変化
 
  第2回 クラウド・コンピューティング時代の認証技術
    1.アイデンティティ連携(フェデレーション)の要素技術
    2.マイクロソフトのアイデンティティに関するビジョン
    3.アイデンティティ・メタシステムの実装
 
  第3回 クラウド・サービスと社内ADとのSSOを実現する(前)
    1.AD FS 2.0のセットアップ
    2.Google AppsとAD FS 2.0との連携
    3.Windows Live IDとAD FS 2.0との連携
    4.Salesforce.com CRMとAD FS 2.0との連携
 
  第4回 クラウド・サービスと社内ADとのSSOを実現する(後)
  1.Windows AzureとAD FS 2.0との連携(1)
    2.Windows AzureとAD FS 2.0との連携(2)

 Windows 運用


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間