2010年12月26日日曜日

ACSでWindowsLiveIDを使う場合に割と普通にはまるポイント

若干わかる人にしかわからないタイトルになっていますが、内容的にはFAQになりそうなポイントなのでいつも通り解説していきます。
環境を作る上での詳細な手順は以前紹介した内容割と普通さんの日記を参照してください。


■問題が発生する状況
AppFabric Access Control Service(ACS)を使って外部認証するアプリケーション(RP)を作りたい。※ACSはLab版
・認証(IdP)はWindows LiveIDを使いたい。

■問題
・Windows LiveIDで認証された後、クレームが取得出来ない(様に見える)
・Googleで認証するとうまくクレームの取得ができる

単純なWIFを使ったアプリケーションでPage_Loadで画面上にPage.User.Identity.Nameの値を表示するもの。











Googleで認証されると取得できる。













■原因は何か?
先に結論を言ってしまいますが、アプリケーションが使いたいクレームをWindows LiveIDが提供していないことが原因です。
通常クレームを使うアプリケーションは取得したクレームから利用者を特定するためにWIFによってプロパティに設定されるPage.User.Identity.Name変数を利用します。

しかし、この変数はClaimType=http://schemaes.xmlsoap.org/ws/2005/05/identity/claims/nameという型でクレームが発行されていないとセットされないので、Identity Providerがname属性のクレームを発行していないと変数には何も入りません。

ACSのClaim Ruleを見てみるとIdPにWindows LiveIDを選択するとInput Claim Typeにはnameidentifierの1種類しか選択できないことがわかります。













実際に発行されたトークンの中身を見てみてもnameidentifier以外のクレームは発行されていません。
トークンの中身を見るにはいくつか方法があるのですが、ここではCodePlexに公開されているSecurityTokenVisualizerを使います。(詳しい使い方は後日紹介します)











Googleで認証するとうまくいくのはGoogleがname属性を提供しているからです。













■ではどうしたら良いのか?

そもそも何故Windows LiveIDではnameidentifier以外の属性を発行していないのでしょうか?また、nameidentifier属性に入っている値は何を意味するのでしょうか?nameidentiferに入っている値から他の属性の値を取得することはできないのでしょうか?

答えはMSDNフォーラムにありました。

-----------------------------
For LiveId, the NameIdentifier is an unreversable hash of the user's Live PUID and is therefore not usable to get more information. This behavior is due to Windows Live privacy requirements. Currently one possible workaround is to manually add mapping rules to map the hash code to a specific username on ACS labs portal.
-----------------------------
要するに、
・nameidentifier属性にはWindows Live IDのPUID※のハッシュ値が入る
 ※account.live.comに表示される固有ID
・この値から他の属性の取得はできない
・これはWindows Liveのプライバシー上の理由からである
・ワークアラウンドとしては各nameidentifier属性に入るハッシュ値とユーザ名を手動でマッピングするしかない
ということです。

インターネット上のアイデンティティという話をするとどうしても避けて通れないプライバシーの問題に行き当たるようです。SAML2.0の仮名と同じ考え方ですが、特定のRPでしか使えない識別子を割り当てることによりそのユーザが他にどのようなRPを使っているかの特定、また他のRPへは提供されている属性を識別子をキーに収集して本人の同意がない形でアイデンティティを見える化されてしまうことを防ぐための仕様です。(これもまた別の機会に解説します)


結果的にフォーラムにもあるワークアラウンドを用いる形になりますが、何もACS側のマッピングにユーザの属性を個別にマッピングする必要はなく、「認証」と「ユーザ属性の管理」を分離して考えて、
・認証:Windows Live ID
・ユーザ属性の管理:アプリケーション
で実施するのが現実的だと思います。

具体的にはWindows Live IDで認証された後、取得できるPUID(のハッシュ値)をアプリケーション側のユーザテーブルと紐付けて、初めてのPUIDならユーザ情報を登録し、すでに存在するPUIDなら登録済みのユーザ情報をベースにアプリケーションを開始する、という流れになります。(Googleなど他の属性も取得できるIdPを使う場合はある程度の情報はユーザテーブルに初期値として登録してあげればよい)

このあたりはそのうちサンプルアプリケーションを作って公開でもしようかと思います。

2010年12月21日火曜日

【祝】日本語化!クレーム ベース ID およびアクセス コントロールのガイド

以前のポストで紹介した「A Guide to Claims-Based Identity and Access Control」が日本語化されました。














以前のポスト

英語版で読んでもかなり理解しやすく書いてあったので、日本語になったことでクレームベースアイデンティティの分野のハードルが下がったかな?と思いますので、是非読んでみてください。
後は、VittrioWIF本が日本語化されれば完璧ですがあまりにも読者層が薄いと思われるので中々難しいんでしょうね。

2010年12月15日水曜日

カンターラ・イニシアティブ技術セミナー2010に参加してきました(12/19更新)

【12/19更新:資料が公開されました】

12/14にカンターラ・イニシアティブ技術セミナー2010が新宿であったので参加してきました。

今回は
SAML標準技術を活用した学術認証連携基盤の構築
 国立情報学研究所 学術ネットワーク研究開発センター 教授 中村 素典さん
バックオフィス連携実験におけるID連携技術の適用
 株式会社NTTデータ リージョナルビジネス事業本部 永田 敏之さん
の2本立てでした。

話の流れはいずれ資料が公開されると思いますし、それまでは@hirokiさんがtogetterしてくれたのでそちらを見ていただければある程度流れはわかると思いますが、ざっくりおさらいをしておきます。


メインテーマに入る前にJapan Workgroupの坂本さんから最近のKantara Initiativeの活動を紹介してくださいました。これまで各WGの活動と他のWGとの関連性をまとめた資料は見たことがなかったのでとても貴重な話でした。
前回のシンポジウムのメインテーマだったことからもわかりますが、最近Kantara Initiativeが一番注力しているのがIAF(Identity Assurance Framework)で、IAF WG以外のいくつかのWGの活動もIAFに絡んでいる、という話もありました。




次にメインの1本目、NIIの中村教授のShibbolethの話ですが、これはUSTで見ていた人にはわからないと思いますが、「学認ベスト(笑)」をまず最初に披露していました。(どこに売っているんだろう??)※学認(GakuNin)=学術認証ネットワーク
普段は基本的にエンタープライズを相手にお仕事をしているのでShibbolethは全くの門外漢なのですが、非常に基本的なところからShibbolethを解説していただき非常に役に立ちました。
基本的な考え方はSAML対応のWebSSOとDS(Discovery Service)がセットになった仕組みなので、他のWeb SSOとあんまり変わりませんが特徴としては以下の様な所であると感じました。

・スキーマ(eduPersonなど)が標準化されておりSPでの認可が共通化されている
 この辺りは共通基盤の強みです。

・DSとセットになっている
 複数IdP(各大学)と連携することを前提に作られているのでIdPを選択させる仕組みが必要になります。

・Federation Metadataを学認が取りまとめている
 通常はIdPとSPの間の信頼とFederation情報のやり取りは個別にやりますが、ここも共通基盤の強みですが、学術認証ネットワークに参加しているIdP(大学)と対応するSP(アプリケーション)の情報を一元管理しています。

・UPKIとの連携
 基本モデルはSPとIdPの間の信頼関係にある点は当然他のSAMLの仕組みと何ら変わらないので証明書のやり取りが発生しますが、事前に学認に参加する大学を審査しておくことにより使用するサーバ証明書の発行を簡素化する、という仕組みも構築されているそうです。



次にバックオフィス連携の実証実験の話ですが、これは電子行政(住民票の電子申請とか)を推進するために裏側(バックオフィス)で各自治体などとセキュアに情報をやり取りするための取り組みに関する話でした。
今後このバックオフィス連携の仕組みが自治体や各省庁の間の情報連携を行うための情報ハブ・プラットフォームとなるということでした。

現段階では実証実験ですが、SAML2.0 / ID-WSF2.0を採用しフェデレーションやプライバシー情報の連携を行っており、かつそれらの要素技術を何故選択したのか?などについても解説があったので非常に参考になりました。
また、行政関連ということで特徴的だったのが例えば障害等級の情報など非常にセンシティブな情報を扱うことが前提となる仕組みなのでID-WSFなど本人の同意の元で最低限の情報を連携する仕組みが必要になってくるということでした。他にも自治体職員が本人の代わりに過去に本人が在住していた自治体から情報を取得する時にいかにプライバシーを保護するのか?というテーマでのユースケースが紹介されたりと興味深い点が数多くありました。


とりあえずメインセッションの資料の公開を期待して待っておきましょう。
すみません、字ばっかりで。

2010年12月9日木曜日

[ADFS2.0] SAML 2.0ベースのWebSSOシステムとの連携

マイクロソフト フランスのPhilippe BeraudさんとUPMC(French University Pierre and Marie Curie)のJean-Marie Thiaさんの共著のホワイトペーパーが公開されています。

Using AD FS 2.0 for interoperable SAML 2.0-based federated Web Single Sign-On
[直リンクです]※元のダウンロードページがわからなかったので。。。
http://download.microsoft.com/documents/France/Interop/2010/Using_ADFS2_0_For_Interoperable_SAML_2_0-Based_Federated_SSO.docx

これまで個別のWebSSO製品とのフェデレーションのSTEP-BY-STEPガイドはリリースされてきましたが、根本的にAD FS2.0ろSAMLの相互運用性について書いたドキュメントはGenevaの時代を含めなかった様に記憶しています。

[参考:これまでリリースされた各種WebSSO製品とのフェデレーションガイド]
・CA Federation Manager
 http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=fef76ca4-5677-4356-afb1-196d8f92dc79
・Oracle Identity Federation
 http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=46bd1cc0-cbe1-4426-875d-428b25b65f1a
・Shibboleth 2 / InCommon Federation (製品じゃないけど)
 http://technet.microsoft.com/en-us/library/gg317734(WS.10).aspx

 ※他にもGenevaの時代にNovell Access ManagerやSun OpenSSOとの相互運用性のホワイトペーパーはありました。
  http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=9eb1f3c7-84da-40eb-b9aa-44724c98e026




そんな状況を踏まえてこのホワイトペーパーでは以下を目的にしています。
-------------------------------------------------------------------------

For that purposes, beyond a short depiction of AD FS 2.0 to introduce key
concepts for the rest of the paper, it gives an understanding of:
・ What the SAML 2.0 standard is all about,
・ What its support makes possible,
・ The common "gotchas" that may be encountered along with AD FS 2.0.
So that federation projects involving AD FS 2.0 in this context can be more easily
completed, and consequently enabling customers to realize the full
interoperability potential of AD FS 2.0.

--------------------------------------------------------------------------


要は、SAML 2.0とは何であるか?、何が出来るのか?、AD FS 2.0を使うときに引っかかるポイントはなんなのか?を理解するためのもの、ということです。
これからAD FS2.0やSAMLに取り組む人にはかなり役に立ちそうです。


以下に目次を紹介しておきます。

1 INTRODUCTION
1.1 OBJECTIVES OF THIS PAPER
1.2 ORGANIZATION OF THIS PAPER
1.3 ABOUT THE AUDIENCE
1.4 TERMINOLOGY USED IN THIS PAPER
1.5 ABOUT THE LIVE DEMO AT THE MTC PARIS
2 AN UNDERSTANDING OF THE SAML 2.0 STANDARD
2.1 A SUITE OF SPECIFICATIONS
2.2 SAML 2.0 ASSERTIONS
2.3 SAML 2.0 PROTOCOLS
2.4 SAML 2.0 BINDINGS
2.5 SAML 2.0 PROFILES
2.6 SAML 2.0 OPERATIONAL MODES
3 A BRIEF OVERVIEW OF ACTIVE DIRECTORY FEDERATION SERVICES (AD FS) 2.0
3.1 A PASSIVE/ACTIVE SECURITY TOKEN SERVICE (STS)
3.2 FEDERATION IN HETEROGENEOUS ENVIRONMENTS
3.3 AD FS 2.0 AND THE BUSINESS READY SECURITY
4 THE ELEVEN INTEROPERABILITY "GOTCHAS" YOU SHOULD BE AWARE OF
4.1 ENCRYPTION
4.2 SIGNING
4.3 CRL CHECKING
4.4 METADATA HANDLING
4.5 NAME ID FORMATS
4.6 PERSISTENT & TRANSIENT NAME IDS
4.7 SHARING ATTRIBUTES WITH SAML 2.0 SPS
4.8 HTTP ARTIFACT BINDING
4.9 PRE-FORMATTED HYPERLINKS
4.10 SSO FROM SAML 2.0 IDPS TO WIF RELYING PARTY APPLICATIONS
4.11 IDP DISCOVERY
APPENDIX A. AD FS 2.0 CUSTOMIZED FILES

2010年12月1日水曜日

「AD FS 2.0 デザインガイド」の日本語版

なかなか日本語リソースが少ないこの領域ですがだんだんドキュメントの翻訳が進んできているようです。

今日も以下のURLで「AD FS 2.0 デザインガイド」の日本語版が公開されています。

http://technet.microsoft.com/ja-jp/library/gg308546.aspx

















コンテンツは以下の構成となっています。
・AD FS 2.0 を展開する前に重要な概念について理解する
・AD FS 2.0 の展開目的を特定する
・展開目的を AD FS 2.0 設計にマップする
・展開を計画する
・フェデレーション サーバー の配置を計画する
・フェデレーション サーバー プロキシの配置を計画する
・付録 A: AD FS 2.0 の要件を確認する

私もAD FS 2.0(当時はGenevaでしたが)を触り始めたころは英語版のマニュアルと格闘していたのですが、その後このデザインガイドの英語版やEuginio Paceさんの「A Guide to Claim-Based Identity and Access Control」やVittorio Bertocciさんの「Understanding Windows CardSpace」を参考にして小難しい概念を理解しようとしていた思い出があります。





































なかなか特殊な分野なのか日本語での書籍は商業的にも難しいのかも知れませんが、このように日本語のオンラインドキュメントが出てきたことで初めの一歩のハードルは下がってきたのかも知れません。
(一部製品のメニューの日本語名とは異なる用語が使われてしまっているので混乱はあるかも知れませんが・・・。元々のメニューの日本語がわかりにくすぎる、という説もw)

2010年11月24日水曜日

Office365のアイデンティティ管理

先日MVP OpenDayというクローズなイベントがあり、色々と話を聴いたのですが流石にNDAが多くblogにかけないものばかりですので、ここでは現状TechEd Europeなどで公開されている情報を。

マイクロソフトが提供するSaaSであるBPOSが次期リリースよりOffice365という名称になるのはある程度周知の事実かと思います。
提供されるサービス自体ももちろん色々とエンハンスされていますが、ここではアイデンティティ管理に関する機能に着目してみます。(ネタ元は殆どTechEd Europeです)


■Office365におけるアイデンティティ管理

まず、Office365のエディションとそのアイデンティティ管理に関する特徴を見てみます。
参考サイト:http://office365.microsoft.com/en-US/office365-beta.aspx

Office365のエディションとして提供されるのは大きく分けると
・Office365 for small business
・Office365 for enterprises
・Office365 for education
の3種類です。

また、アイデンティティ管理については以下の3つのパターンが存在します。
1.MS OnlineIDのみ
2.MS OnlineID + DirSync
3.Federated ID + DirSync














これらのうち、1番目と2番目については以前のBPOSと変わらないので新しいオプションである3番目のフェデレーション+ディレクトリ同期について見ていきますが、この機能(フェデレーション)はfor enterpriseとfor educationについてのみサポートされます。


■フェデレーションの構成
基本的には、AD FS2.0とOffice365側にあるFederation Provider(Microsoft Federation Gateway / MFG)を使ってOffice365上のアイデンティティ情報とオンプレミス(Active Directory)のアイデンティティのひも付けを行う(フェデレーション)という考え方です。
この際Office365側のアイデンティティストアとオンプレミスのアイデンティティストア(Active Directory)の情報の同期を行うのがDirSyncというツール、というわけです。
また、フェデレーションについてはブラウザを使う場合はPassiveプロファイルが使えますが、Outlook等のリッチクライアントを使う場合はActiveプロファイルでのアクセス(自らがIdPのエンドポイントをあらかじめ知っている必要がある)を行うため、初回のみService Connectorというツールのインストールが必要になります。

関連するコンポーネントをまとめると以下のようになります。
コンポーネント役割
AD FS2.0 / MFGフェデレーションを行う
DirSyncオンプレミスのアイデンティティストアとオンライン(Office365)のアイデンティティストアの情報を同期する
Service Connectorリッチクライアント(Outlook等)へのActive SSO設定を行う














ちなみにMFGは現段階ではSAML2.0をサポートしていないので、オンプレミスのフェデレーションサーバにAD FS2.0以外を持ってくる場合は注意が必要です。(AD FS2.0以外を使う構成がサポートされるかどうかはわかりませんが)

ちなみにBPOSにおいては各クライアントにサインインツールをインストールして擬似的なシングルサインオンを実現していましたが、Office365においては非推奨となっています。(継続的に使えるのかどうかは不明です)













■ディレクトリ同期ツール(DirSync)
仕組み自体はBPOSのころと変わりませんが、このツールのバージョンもVersion 2に上がっており、例えば大きいところではセキュリティグループの同期などもサポートしています。













ちなみにこのツールはILM2007をベースとして構成されているツールなのですが、今後はこのような独立したツールとしてではなく、FIM2010用の管理エージェントとしても提供される見込みです。そうなるとある程度カスタマイズの余地も出てきますし64bit環境メリットもフルに活用することが可能になると思われます。













いずれにしてもbeta版の一般公開はしばらく先の様なので、実際の動きについては継続的に情報を収集していく必要がありそうです。
とりあえずbeta利用の応募は先のサイトからも可能なので、応募はしてみました。待ち行列に入っているようですが・・・

■参考セッション(TechEd Europe)
・COS301 - Microsoft Office 365 Directory Synchronization
・COS302 - Office 365: Identity and Access Solutions

2010年11月9日火曜日

TechEd Europe 2010 の Identity系セッション

TechEd Europe 2010がが今週(11/8-12)でベルリンで開催されています。
















さすがに日本での開催とは規模が違い、多くのIdentity関連のセッションが用意されています。
少しピックアップしてみました。これからセッション資料やビデオなども公開されるようなので公開されたら見て紹介してみたいと思います。
Office365のAD FS2.0を使ったフェデレーションなんかは今後日本でもニーズが出てきそうなので要チェックかと思います。

ARC303 - Architecting Claims-Aware Applications (with the Windows Identity Foundation and Active Directory Federation Services)
Claims, Tokens and (possibly) Federation are the new ways to model authentication, access control and personalization for distributed applications. The possibilities for these technologies are vast, but there are some well-established patterns to fit typical security scenarios. These include guidelines for the usage of claims, identity providers, resource security token services, federation gateways and multi-tenancy. This talk walks you through common application architectures and illustrates how to use the Windows Identity Foundation (WIF) and Active Directory Federation Services (ADFS) to tap into the power of claims-based security

COS302 - Office 365: Identity and Access Solutions
This session provides a preview of the identity and access solutions in the next generation of the Business Productivity Online Standard Suite (Office 365). The session will focus on how authentication works for both web apps and rich client apps, how to enable single sign-on (SSO) using corporate AD credentials and AD FS 2.0 to Office 365 services, and the different SSO deployment options for Office 365 services.

OFS308 - Deploying Microsoft SharePoint Server 2010 with Claims Authentication
This session will walk you step-by-step through the process of configuring a SharePoint web application to use SAML claims and ADFS v2. It will cover some basic usage scenarios, and describe specifically how they impact sites using SAML claims and how to implement common changes in a SAML claims environment. The session will also include some basic troubleshooting steps to help you understand why users may not be able to log on to a SAML claims site

SIA203-IS - Interactive Discussion on Identity Futures with Microsoft Program Managers
What does Identity mean to you? Do you want to influence the future of Microsoft's Identity offerings? This highly interactive, discussion-based session provides a unique opportunity to share real-world requirements and understand how your priorities align with those of other TechEd attendees. Members of Microsoft's Identity and Access product team will be on hand to absorb your feedback first-hand, and to guide participants through a fast-paced discussion covering a wide range of topics

SIA301-IS - Under the Hood: What Really Happens During Critical Active Directory Operations
Come and discuss critical Active Directory-Operations. Are you fully aware what “critical” operations in AD really do? In this interactive session we will talk about those operations, understanding what they are doing and how to distinguish whether operations are critical to your environment or not. Ulf has been working in the field for more than 13 years, and has a lot of notes and examples to share. We will talk about how to approach challenges, and study scenarios that show how other companies managed the associated risks and prepared for rollbacks. We have some common scenarios for everyone but please bring your own questions as well, as we want this talk to be as interactive as possible

SIA303-LNC - Common Identity Across On-premises, Private and Public Cloud
See how Forefront Identity Manager is used to provide self-service delegated management of on-premises and private cloud datacenter resources. You will learn how Forefront Identity Manager, Active Directory Federation Services and Windows Identity Foundation are being integrated to provision users and provide access to application services in the cloud (Azure and BPOS), and also how to configure FIM to ensure that quality identity data is available to these applications, and how users can perform self-service claims management

SIA305 - Windows Identity Foundation and Windows Azure for Developers
Claims-based identity provides an open and interoperable approach to identity and access control that can be applied consistently, both on-premises and in the cloud. Come to this session to learn about how Windows Identity Foundation can be used to secure your Web Roles hosted in Windows Azure, how you can take advantage of existing on-premises identities, and how to make the best of features in our cloud offering, such as certificate management and staged environments. This is an ideal session for developers

SIA306 - A Dozen Years AD - Discuss Previous and Future Design Decisions
Active Directory has evolved over the years, along with security recommendations and best practices. But has our corporate design changed that much? Is it required? What should we change, and what should we retain? Ulf B. Simon-Weidner is a long standing, internationally recognized expert in Active Directory, and in this session he will discuss Active Directory Designs of the past, present and future

SIA311 - Deploying and Managing Forefront Identity Manager 2010
Forefront Identity Manager 2010 is a powerful product that includes many features across multiple platforms. Deploying and managing FIM requires broad domain knowledge in technologies like Active Directory, SharePoint, Exchange, SQL, Windows Communication Foundation, Workflow Foundation and ILM 2007. This session covers the basic approaches, “tips and tricks”, and common problems faced by customers. It includes best practices for managing and deploying FIM, based on the knowledge and experience of the product team and work done with Microsoft IT. This is the session for attendees who plan to deploy, configure or administer FIM

SIA313 - Cloud Security: The Practical Meaning of Security, Identity and Access Revealed!
The CLOUD is coming. But let’s face it, you must have asked yourself if it possible to hack the claims? How can we prevent this? One thing is sure: moving from on-premises applications to the cloud is like moving from a home generator to the electricity grid. We put our trust in the external identity providers, but are we really sure that all of the security issues have been addressed? We focus on the application in the cloud, but is this really the application that we need to protect? New solutions bring new possible attack vectors, and not only from the outside! Come and see what can happen when the users, or even the administrators, become the bad guys.During this intensive and extremely practical session, presenters will guide you through the threats and challenges related to the industry standard- based services delivered by ADFS v2. Only real-life scenarios! Many practical demos!

SIA316 - Exploring the Possibilities of Forefront Identity Manager 2010: Meeting Business Requirements Through Customization
Forefront Identity Manager 2010 provides a sophisticated platform for enforcing policy in an organization. Often it is necessary to extend FIM to enable some business policies, and this is your opportunity to learn about techniques for extending FIM to meet your specific business requirements. This session introduces the recommended patterns for creating custom web service clients and workflow activities, and includes code examples for each that accomplish common scenarios, such as group management and authorization workflows. The session is designed for developers who are already familiar with FIM, and plan to extend FIM.

SIA318 - Windows Identity Foundation in the Real World
Are you wondering how customers are adopting Windows Identity Foundation (WIF) in the real world? What challenges do they face? What solutions are they implementing? This session presents a series of best practices collected, and lessons learned, during the implementation of large WIF solutions in the real world. We have included a series of practical demonstrations that illustrate how to address important aspects of WIF-based solutions, such as monitoring, scalability, testing, and claim and record management, among many others. Additionally, we will present three case studies that demonstrate how customers are leveraging these solutions to facilitate the implementation of WIF in the enterprise.

SIA320 - Impact of Cloning and Virtualization on Active Directory Domain Services
Customers are looking to further virtualize their environments: file servers, web servers, DNS servers and even their domain controllers. It is clear that virtualization provides many benefits in areas such as deployment, disaster-recovery and lowering TCO. However, while virtualization offers many powerful capabilities and greatly simplifies repetitive tasks, it is a technology that must be handled with care when used in conjunction with Active Directory. In this session we will review fundamental concepts within Active Directory and the impact of cloning & virtualization upon domain controllers, domain members and Windows in general. We will also discuss how to best leverage virtualization, and how to both mitigate problems and to avoid occurrences in the first place.

SIA321 - Explore Secure Collaboration Using Identity Federation in Forefront UAG Service Pack 1
Supercharge your federation solution with Forefront UAG SP1! Learn how UAG can simplify migration to a claims-aware environment, enabling secure, seamless access to all your applications. We will cover what is new in UAG SP1 and look at secure collaboration scenarios and federation via AD FS 2.0. We will demonstrate federation with legacy applications, by translating claims to Kerberos, and enforcing authorization at the edge level

SIA402 - Active Directory Federation Services - How do they really work?
Secure applications must be able to “trust” the identity of users who are accessing the resources. It is simple to establish that trust when Active Directory Windows authentication is used. And if the application needs further identity information about the user in order to qualify its response, the additional properties can be read from the Active Directory. When the application resides outside your realm, maybe in the Cloud or within a partner organization, how do we establish trust? This is where Active Directory Federation Services (ADFS) provides a method of linking trust between disparate parties. One organization authenticates the user and creates an industry standard token that contains the Identity of the user in the form of claims. The receiving organization accepts the user’s identity and responds with the appropriate resources because of the established trust. Come to this deep dive, demo rich session and learn how to setup and leverage the true power of ADFS v2

SIA403 - How to (un)Destroy your Active Directory
As a consultant with 10 years of experience in troubleshooting ADDS and as MVP for Directory Services, I prepared an ADDS with the top 10 errors - all at the same time. During this session we will fix it step-by-step, while explaining the reason why this happened and how it can be avoided next time

2010年11月8日月曜日

PDC2010でのアイデンティティ関連セッション

少し時間が経ってしまいましたが先日のPDC2010のアイデンティティ関係のセッション(といっても一つだけでしたが)の概要を紹介したいと思います。

セッションはおなじみのVittorio Bertocciによるもので
Identity & Access Control in the Cloud
というタイトルのものです。
PDCのオフィシャルサイトで動画とスライドが公開されています。(同時通訳も公開されているので日本語でも聞くことができます。たぶん英語で聞いたほうがわかりやすいとは思いますが・・・。後、動画を見るとわかりますがタブレットでスライドにリアルタイムで絵をかきながらプレゼンを進めていたり、デモが多いのでスライドだけをダウンロードしても何もわからないと思います)

内容ですが、メインテーマは「アプリケーションをクラウドに移行するにあたって認証やアイデンティティをどうするか?」というもので、以下のステップで解説をしています。
1.オンプレミス・アプリケーションの認証
2.Windows Azure上のアプリケーションの認証
3.複数の企業が存在する場合
4.ソーシャルプロバイダで認証
5.他のアプリケーション用の認証
6.モバイルの例


それぞれを簡単に解説します。
1.オンプレミス・アプリケーションの認証
  自社内にデータセンタがあり、アプリケーションがある
  本人認証はActive Directoryを使うことによりアプリケーションから分離できる













2.Windows Azure上のアプリケーションの認証
  アプリケーションをWindows Azure上に持っていく
  STS(AD FS2.0)をDirectoryの上に乗せる=IdPとなる
  Claim-Basedという考え方が必要となる
  アプリケーション側にClaimを解釈する仕組み(Windows Identity Foundation=WIF













3.複数の企業が存在する場合
  HomeRealm Discoveryが必要になる
  →IdPのリストを表示することで対応する
  企業ごとにIdPを持っているのでトークンのフォーマットが異なる
  →中間にFederation Providerを配置し、トークンの変換を行う
   Microsoftが用意したのがAppFabric Access Control Service(ACS)である














4.ソーシャルプロバイダで認証
  Facebook、Google、WindowsLive、Yahoo!を例として取り上げる
  課題は、それぞれプロトコルが違う(facebook api,openid,live api...)ことである
  WIFのようなライブラリが個々のプロトコル(しかも頻繁に変わる)をサポートするのではなく、Federation Providerでプロトコルを変換する














5.他のアプリケーション用の認証
  OAuthの話
  ACSが呼び出し元となるFacebook上のアプリケーションにアクセストークンを渡す
  Facebook上のアプリケーションがAzure上のアプリケーションにトークンを渡すことでリソースを利用する













6.モバイルの例
  モバイル(Windows Phone7)上で動くSilverlightアプリケーションの認証をACS経由でFacebookで行い、Azure上のサービスを利用する
















尚、スライド上で出てくるデモについては今週ベルリンで開催されるTechEd Europeでさらに詳細に解説されるようです。
また、Windows Phone7でのデモについてはVittorioのblogで公開されています。



全体を通じて感じたことですが、PDCというDeveloper対象のイベントの性質上もあるのかも知れませんが、Identity Federationの訴求ポイントが「ソーシャルプロバイダとの連携機能を持つACSを使ったAzure上のアプリケーションを開発することにより、5億人もいるFacebookユーザをターゲットすることができる」というビジネスチャンスの拡大にあった点が印象的でした。













現状日本においてはIdentity FederationはあくまでIT管理者をターゲットに「いかにセキュアに自社のアプリケーションをクラウドに持っていくか」という点が訴求ポイントになっていることが多いと思われる中でこれは非常に印象が強かったポイントでした。(しかもマイクロソフトが公式に発言している点で)
日本では「クラウド上でアプリケーションを展開する」という段階のハードルをまずは超える必要があるからだと思われますが、新しいACSのリリースされるタイミングで同様の考え方も広がってくると面白いと思います。

2010年10月28日木曜日

IDaaSに関して考えてみる

たまには製品の実装の話以外も、ということでIDaaS(Identity as a Service)について考えてみます。

クラウドの潮流の中でXaaSというキーワードで「何でもサービス化」というのが流行って?いますが、アイデンティティをサービス提供する形態として「IDaaS」というのもしばしば耳にする様になってきました。

■IDaaSとは何か?
IDaaSとは平たく言うとアイデンティティプロバイダ機能のクラウドサービスなので、
・セキュリティトークンサービス(STS)
 認証機能
 セキュリティトークンの発行、変換機能
・アイデンティティストア
 アイデンティティ情報の保持
 ライフサイクル管理機能(セルフサービスポータル等)
といった機能が提供されることになります。

また、場合によっては他のクラウドサービスへのプロビジョニングを行ったりすることもあり得ると考えられます。

■IDaaSのメリット
IDaaSのメリットとして主に以下の事項が挙げられます。
サービスプロバイダにとって
・認証機能やアイデンティティ管理機を自前で開発しなくてよい
・アイデンティティ情報などのセンシティブな情報を自前で保持しなくてよい

利用者/利用企業にとって
・(サービスが対応していれば)複数のサービスで横断的に利用できる認証基盤となり、シングルサインオンが出来る
・複数のサービスと個別に信頼関係を結ぶ必要がなくなる(フェデレーション・ゲートウェイとしての利用)
・STSのトークン変換機能を使うことで自前(オンプレミス)のIdPを使うことができる(クラウド上にアイデンティティ情報をおく必要が必ずしもなくなる)
















もちろん使い方や利用するサービスによってすべてのメリットを享受できるわけではありませんが、特にフェデレーション・ゲートウェイとしての機能はクラウド・オンプレミスのアイデンティティ連携を行う上では非常に有用な機能となりえると思われます。


■現在のプレイヤー
現在のプレイヤーとしては、GoogleやYahoo!、Windows LiveIDなどOpenIDプロバイダとしてサービスを提供しているものや、FacebookやTwitterなどOAuth対応という形で一部の認証や認可の機能をサービスプロバイダに提供しているものなどが挙げられます。
ただ、先述のクラウド・オンプレミス連携を行う上で重要となるフェデレーション・ゲートウェイ機能を提供しているサービスはまだ少なく、PingIdentityや対応するサービスが限定的ですがマイクロソフト(Microsoft Federation Gateway)くらいがメジャーどころだと思います。


■IDaaSを立ち上げるには?
これはIDaaSに限りませんがGoogleやAmazonの様に自前でサービスを提供するためにシステムを開発するプロバイダやマイクロソフトの様に元々製品を持っていたものをベースにサービスを提供するプロバイダと違って、OSS以外の既製品を組み合わせてサービス化していくのは採算的に中々厳しいと思われます。
(AmazonやGoogleの実装を元としてEucalyptusやHadoopが出てきていますが、あくまでリファレンス実装ですし、AmazonやGoogle自身が販売してるモノではありません。仮に彼らが自身のサービスに使っているツールを製品として販売したら相当な価格になるんじゃないかと思います)

例えばIDaaSを立ち上げるのに、市販のシングルサインオン系の製品を使ってしまうと、それらの殆どはユーザ数でライセンス課金なので、1ユーザあたり数千円~数万円の値付けをしないと採算が合わないでしょうが、ユーザが単なる認証機能にそれだけの金額を払うことはないでしょう。(Novell製品で米VerizonなどはIDaaSをやっているといいますから、それなりにベンダの値引きがあるんでしょうが・・・)

となると、自前でIdPを実装するかWSO2OpenSSO/OpenAMなどのOSSをベースとして独自のサービスを実装するという覚悟が必要になるのかも知れません。

また、価格面以外にも認証や認可などセキュリティの根幹を担う機能を外部に委託する事になるので、ユーザからも提携するサービスプロバイダからも信頼される必要があります。ユーザに対してはOpenID CXやID-WSFの様に利用者自身の責任において属性の公開範囲等をコントロールする様な仕組みもありますし、この辺りになるともっと公的な機関との連携が必要になると思いますがKantara/LibertyのIdentity Assurance Framework(IAF)やGSA(米国調達庁)とICAMの例の様に第3者による認定制度の様な仕組みも必要になってくるでしょう。













IAFの認定アセスメントのイメージ


















GSA/ICAM/OIXによる認定のイメージ


このように色々とハードルが高い世界ではありますが、出来れば日本でもPingIdentityの様にIDaaSプロバイダが出てくると面白いと思っています。

2010年10月20日水曜日

AD FS2.0 のデモをする時のひと工夫

AD FS2.0(Active Directory Federation Services 2.0)はクラウド連携というビッグキーワードも手伝ってかなり注目されているのか、最近は色々なところでセミナーやデモを見かけるようになってきました。

ただ、シングルサインオンのデモって非常に地味なんですよね。
ターゲットのアプリケーションにアクセスして、一瞬AD FS2.0へリダイレクトされて統合Windows認証でそのまま元のページへトークンをPOST、ログイン完了という流れにどうしてもなってしまうので、本当にAD FS2.0を使っているかどうかが全然見ている人には伝わりません。

私もデモをする時に同じ悩み?を持ち、ブラウザの統合Windows認証をオフにしたり、インターネットオプションの「ローカル イントラネット」からAD FS2.0のサーバやドメインを削除したりしましたが、ベーシック認証が走ってしまったりしてやはりあんまりうまくありませんでした。
とにかくデモ映えするには明示的にAD FS2.0のログインページにIDとパスワードを入力する、というステップがあった方が良いと思ったので、デフォルトでフォーム認証を使うようにしてみました。

手順は若干強引ですが、AD FS2.0も単なるWIF(Windows Identity Foundation)を使ったASP.NETアプリケーションである、という点に着目してログインページのweb.configファイルを直接編集します。

デフォルトインストールだと「C:\inetpub\adfs\ls\web.config」が編集対象となります。

編集箇所は59行目から始まるmicrosoft.identityServer.webセクションのlocalAuthenticationTypesです。
デフォルトだと

 <add name="Integrated" page="auth/integrated/" />
 <add name="Forms" page="FormsSignIn.aspx" />

という順番でまずIntegratedつまり統合Windows認証が使われるようになっていますが、これを

 <add name="Forms" page="FormsSignIn.aspx" />
 <add name="Integrated" page="auth/integrated/" />

という形でFormsつまりフォーム認証を優先する形に行を入れ替えてみます。

■編集の結果
 <microsoft.identityServer.web>
  <localAuthenticationTypes>
   <add name="Forms" page="FormsSignIn.aspx" />
   <add name="Integrated" page="auth/integrated/" />
   <add name="TlsClient" page="auth/sslclient/" />
   <add name="Basic" page="auth/basic/" />
  </localAuthenticationTypes>

これでファイルを上書き保存するとフォーム認証が優先されるのでAD FS2.0の認証ページにリダイレクトされた際にIDとパスワードを入力するフォーム認証画面が表示されます。
※web.configのバックアップは忘れずに!
















これで少しはイメージのしやすいデモが出来ると思います。

2010年10月1日金曜日

FIM2010 トラブルシューティング/トレースの有効化

Anthony HoさんのBlogでFIM Service / FIM Portal / Password Resetのトラブルシュートに関する記事がアップされていたので紹介したいと思います。
http://blogs.technet.com/b/aho/archive/2010/09/29/troubleshooting-fimservice-fimportal-password-reset-client.aspx

かなり詳細にトレースが出来るので、トラブルが発生した際はこの方法でトレースしてみるのもありかもしれません。

方法は簡単で、各サービスの構成ファイルの中のコメントアウトされている部分を有効にしてサービスを再起動するだけです。

***注意点***
・トレースを出力する設定を行うと動作がとっても重たくなります。
・一部構成ファイルを手動で書き換えるので、環境のバックアップを取得しておくことをおすすめします。
・XMLのタグを表記上全角にしていますが、実際は半角です。



では、FIM Service / Portalを例に実際にやってみます。

編集の対象となるファイルはデフォルトインストールパスでは、
 C:\Program Files\Microsoft Forefront Identity Manager\2010\Service
以下の
 Microsoft.ResourceManagement.Service.exe.xml
です。











・まずはログ出力レベルを変更します。

41行目のswitchValueをErrorからVerboseに変更します。
<source name="Microsoft.ResourceManagement" switchvalue="Error">

<source name="Microsoft.ResourceManagement" switchvalue="Verbose">

・svclogファイルにdiagメッセージを出力する設定を行います。

52行目~56行目のコメントアウトを外します。
<add name="DiagnosticListener">
 <filter type="">
</add>

・diagリスナーがファイルへ情報を出力する設定を行います。

64行目~69行目のコメントアウトを外します。
<add name="DiagnosticListener" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializedata="fimDiagnostics.svclog" traceoutputoptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
 <filter type="">
</add>


・ログの自動フラッシュを設定します。
 ※必須ではありません。この設定を行うとリアルタイムにログファイルに出力されますがパフォーマンスが低下します。

77行目のコメントアウトを外します。
<trace autoflush="true">


構成ファイルを保存し、サービス(Forefront Identity Manager Service)を再起動すれば先ほどのフォルダの中に
 fimDiagnostics.svclog
というファイルが出来ます。











しばらくポータルの操作などを行うと、ファイルの中にプロセスのトレース等の情報が書き込まれます。















先に紹介したAnthony Hoさんのblogエントリには他にもPassword Resetのトレース方法などの情報も載っていますので、トラブルの時は参照してください。

2010年9月24日金曜日

FIM2010 Google Appsへのプロビジョニング その2

前回に引き続きGoogle Appsへのプロビジョニングについてです。
今回は実際の動作およびソースコードを紹介します。

■試す
では、早速動作を確認してみます。
今回は以下のような構成です。

















CSVファイルから名前、姓、名を読み取り、Active DirectoryおよびGoogle Apps上にアカウントを作成します。
ポイントは、Google AppsのログオンID+ドメイン名をActive Directoryのメールアドレス属性にセットすることです。もちろんAD FS2.0の属性マッピングで同様の設定を行うことも可能ですが、ここではFIM2010側で実施しました。

この設定を行うことにより、AD FS2.0は属性ストアであるActive Directoryのメールアドレス属性から取得した値をSAMLのNameIdentifier属性としてGoogle Appsへ渡してシングル・サインオンが成立します。














実際にCSVにユーザ情報を記載して、以下の手順で実行プロファイルを実行します。
CSV MA
 Import
 Synchronization
AD MA
 Synchronization
 Export
GoogleApps MA
 Synchronization
 Export

実行後、Google Appsの管理画面を見ると確かにユーザが作成されていることがわかります。



















尚、Google Appsへのプロビジョニングを行う上で何点か注意点があります。(Google Appsの仕様)
・購入ユーザ数を超えてユーザを作成することはできない
 当たり前ですが、サービスを契約しているユーザ数以上はプロビジョニングできません。無理やりプロビジョニングしようとするとDomainUserLimitExceededという例外が発生します。
・削除したユーザと同じユーザ名のユーザは削除後5日間は作成できない
 ユーザの再作成を5日以内に実行するとUserDeletedRecentlyという例外が発生します。今回作成したMAには入れていませんが、削除ではなくサスペンドという対応にした方が良いかもしれません。(ユーザ数の増加になるので課金が増えますが)


また、プロビジョニングとは直接関係ありませんが実環境で使うためには以下の点にも留意が必要です。
Google Appsなどのクラウド上のサービスは性質上インターネットに接続できる環境であれば直接ログオンしようと思えばログオンできてしまいます。
ただ、実際に企業から使おうと思うと自宅PCから制限なくアクセスさせてしまうのは避けたいところなので、一般的に以下のような手段をとります。
・特定のネットワークからしかサービスに接続できなくする(サービス側が対応している必要あり)
・認証システムを社内に配置し、そのシステムにアクセスできるネットワークに接続できないと認証が出来ずサービスが利用できなくする


今回の場合、認証システムを外だしするという形をとりますが、Google Appsの場合例えばGmailに直接接続する場合は外部認証システムに強制リダイレクトする、という形が取れますが、管理コンソール(http://www.google.com/a/yourdomain.com/)経由のアクセスだとGoogle Apps自身が持っている認証システムでの認証となるので、パスワードさえ合致すればインターネットからでも接続できてしまいます。
これを防ぐために非常にアナログな手段ですがGoogle Appsへプロビジョニングを行う際に設定するユーザのパスワードはランダム文字列にし、且つ定期的に自動変更されるような仕組みを作ります。


■今回のソースコード

最後に今回作成したMAのソースコードを張り付けておきます。(sourceforge.netからダウンロードできるものと同じです)

メインモジュール

using System;
using System.Xml;
using System.Text;
using System.Collections.Specialized;
using Microsoft.MetadirectoryServices;
using Google.GData.Apps;
using Google.GData.Client;
using Google.GData.Extensions;
namespace Miis_CallExport
{
  public class MACallExport : 
    IMAExtensibleFileImport,
    IMAExtensibleCallExport
  {
    AppsService service;
    lib lb;
    Boolean m_isInitialized;
    // Constructor
    public MACallExport()
    {
      lb = new lib();
      m_isInitialized = true;
    }
    // Deconstructor
    ~MACallExport()
    {
      lb.Cleanup(false);
      m_isInitialized = false;
    }
    public void GenerateImportFile(
      string           filename,
      string           connectTo,
      string           user,
      string           password,
      ConfigParameterCollection  configParameters,
      bool            fullImport,
      TypeDescriptionCollection  types,
      ref string         customData
      )
    {
      //
      // TODO: Remove this throw statement if you implement this method
      //
      throw new EntryPointNotImplementedException();
    }
    public void BeginExport(
      string           connectTo,
      string           user,
      string           password,
      ConfigParameterCollection  configParameters,
      TypeDescriptionCollection  types
      )
    {
      service = new AppsService(connectTo, user, password);
#if DEBUG
      lb.Logging("BeginExport", "000");
      lb.Logging("connectTo : " + connectTo, "000");
      lb.Logging("user : " + user, "000");
      lb.Logging("password : " + password, "000");
#endif
    }
    public void ExportEntry(
      ModificationType  modificationType,
      string[]      changedAttributes,
      CSEntry       csentry
      )
    {
#if DEBUG
      lb.Logging("ExportEntry", "000");
      lb.Logging("modificationType : " + modificationType, "000");
      for (int i = 0; i < user =" service.RetrieveUser(csentry[" familyname =" csentry[" givenname =" csentry[" password =" csentry[">





ライブラリモジュール(エラー処理など)

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.MetadirectoryServices;
namespace Miis_CallExport
{
  class lib
  {
    // Google Apps API ErrorCode
    const int UnknownError = 1000;
    const int UserDeletedRecently = 1100;
    const int UserSuspended = 1101;
    const int DomainUserLimitExceeded = 1200;
    const int DomainAliasLimitExceeded = 1201;
    const int DomainSuspended = 1202;
    const int DomainFeatureUnavailable = 1203;
    const int EntityExists = 1300;
    const int EntityDoesNotExist = 1301;
    const int EntityNameIsReserved = 1302;
    const int EntityNameNotValid = 1303;
    const int InvalidGivenName = 1400;
    const int InvalidFamilyName = 1401;
    const int InvalidPassword = 1402;
    const int InvalidUsername = 1403;
    const int InvalidHashFunctionName = 1404;
    const int InvalidHashDigestLength = 1405;
    const int InvalidEmailAddress = 1406;
    const int InvalidQueryParameterValue = 1407;
    const int TooManyRecipientsOnEmailList = 1500;
    //
    const string LogfileName = "\\GoogleApps.log";
    // private variables
    Boolean m_isInitialized;
    StreamWriter m_writer;
    // Constructor
    public lib()
    {
      string logfile = MAUtils.MAFolder.ToString() + LogfileName;
      m_writer = new StreamWriter(logfile, true);
      m_isInitialized = true;
    }
    // Deconstructor
    ~lib()
    {
      if (m_isInitialized)
      {
        Cleanup(true);
      }
    }
    // Cleanup
    public void Cleanup(Boolean isFromDeconstructor)
    {
      if (isFromDeconstructor)
      {
        m_writer.Close();
        m_isInitialized = false;
      }
      else
      {
        m_writer.Close();
      }
    }
    // Notify Google Apps Errors to FIM2010
    public void handleException(string errorMessage, string errorCode)
    {
      Logging(errorMessage, errorCode);
      switch (int.Parse(errorCode))
      {
        case EntityExists:
          throw new Microsoft.MetadirectoryServices.ObjectAlreadyExistsException(errorMessage);
        case EntityDoesNotExist:
          throw new Microsoft.MetadirectoryServices.NoSuchObjectException(errorMessage);
        case UnknownError:
        case UserDeletedRecently:
        case UserSuspended:
        case DomainUserLimitExceeded:
        case DomainAliasLimitExceeded:
        case DomainSuspended:
        case DomainFeatureUnavailable:
        case EntityNameIsReserved:
        case EntityNameNotValid:
        case InvalidGivenName:
        case InvalidFamilyName:
        case InvalidPassword:
        case InvalidUsername:
        case InvalidHashFunctionName:
        case InvalidHashDigestLength:
        case InvalidEmailAddress:
        case InvalidQueryParameterValue:
        case TooManyRecipientsOnEmailList:
        default:
          throw new Microsoft.MetadirectoryServices.ExtensibleExtensionException(errorMessage);
      }
    }
    // Logging
    public void Logging(string errMessage, string errCode)
    {
      m_writer.WriteLine("[{0}] {1} {2}", DateTime.Now.ToString(), errCode, errMessage);
    }
  }
}

2010年9月23日木曜日

FIMの本、WIFの本

洋書ですが要チェックな本を紹介します。

まずはFIMの本です。先日も紹介した本ですが、MVPのDavid Lundellさんの作です。

FIM Best Practices Volume 1: Introduction, Architecture And Installation Of Forefront Identity Manager 2010




















分散でのFIMの構成方法など非常に詳しく記載されているので、実際の業務環境にFIMを導入する際には非常に役に立つ本だと思います。
オンデマンド印刷の形で販売されているので一般書店やAmazonには流通しないと思いますので、ここで購入する形になります。
オーダーしてから2週間程度で届きました。

もちろん日本語なら青本も必携ですが。


次にWIF本です。
こちらはMicrosoftのVittorio Bertocciさんの作でAmazon.co.jpでも購入できます。

目次を見るとWIFそのものの動きに関する章からASP.NETでのプログラマ向けの章、Windows AzureやWCFへの組み込みの話まで非常に有用な内容が目白押しです。
ちなみに9月初旬に発売されているのですが、まだ手元には届いていません。。。














2010年9月11日土曜日

FIM2010 Google Appsへのプロビジョニング その1

ILMやFIM Synchronization ServiceはManagement Agent(MA)というアダプタを使って各種レポジトリ(Active Directoryやデータベースなど)との同期やプロビジョニングを行っています。

もちろん元々用意されているMAでもある程度のシステムはカバーしているのですが、カスタムのMAを作成して対応していないシステムとの同期をさせることもできます。
その時に使うのが、
 Extensible Connectivity(XMA)
です。













このタイプのMAを使うとコーディングは必要ですが同期先システムに合わせてカスタムMAを作成することができます。

今回はこの仕組みを使ってGoogle Appsへのユーザの作成・更新・削除を行うMAを作ってみたいと思います。
別のエントリでも述べているようにAD FS2.0を使ってGoogle AppsへのログインをActive Directoryの認証で行う、という方法もありますので、その方法と合わせるとGoogle Apps上のユーザのライフサイクル管理と認証を完全に管理することができます。


















■準備
まず、必要となる環境ですがGoogle Apps上のユーザを外部から管理するためにはGoogle AppsのProvisioning APIを使う必要があります。
その場合、
 Google Apps Premium Edition
 Google Apps Education Editionon
のどちらかが必要になりますので予め契約をしておく必要があります。(Premium Editionには30日間の試用期間あり)
※ちなみに1ユーザから契約ができますが、1ユーザだけではユーザの追加ができないので、最低2ユーザは契約しておく必要があります。

購入(もしくは試用)が出来たらGoogle Appsの管理コンソールより、ユーザーとグループ -> 設定 メニューで[Provisioning APIを有効にする]にチェックを入れます。
これでGoogle Apps側の準備は完了です。











次に開発を行うための準備をします。
私はVisual Studio 2010 Ultimate Editionを使っていますが、FIMのExtension ProjectはVisual Studio 2008がデフォルトなので当然2008でも構いません。

.NET環境からGoogleのProvisioning APIを利用するためのクラスライブラリがGoogleから提供されているので、以下のURLからダウンロードしセットアップしておきます。
URL
 http://code.google.com/p/google-gdata/downloads/list
モジュール
 Google Data API Setup (1.6.0.0).msi

まとめ(準備)
Google Apps Premium or Education Editionの契約(2ユーザ以上)
Visual Studio 2008 / 2010
Google Data APIライブラリのインストール
※もちろんFIMも必要です(笑)


■カスタムMAの作成
早速カスタムMAを作成するのですが、まずはFIM Synchronization ServiceのコンソールでMAを作成します。先にMAを作成することでFIMがあらかじめ用意しているカスタムMAのプロジェクトテンプレートを使うことができるようになります。

以下の通り、MAを作成します。(デフォルトから変更する部分のみ)
ページ項目
Create Management AgentManagement agent forExtensible Connectivity
NameGoogle Apps
Configure Connection InformationSpecify the interfaces supported by this management agentExport
Spscify the export mode supported by this management agentCall-based
Connected data source extension nameGoogleApps__Extension.dll
Connec ToGoogle Appsの契約ドメイン名
UserGoogle Appsの管理者ユーザ名(emailアドレス)
PasswordGoogle Appsの管理者パスワード
Select Template Input FileTemplate Input File任意※
File formatDelimited
Delimited Text FormatUse first row for header namesチェック
Text qualifier<none>
Configure AttributesSet Anchorname
Configure Join and Projection RuleJoin Rule for personname <direct> accountName
Projection / Metaverse object typeperson
Configure Attibute FlowDatasource <- MetaversegivenName <export> givenName
sn <export> sn
userPassword <export/Advanced> Constant[P@ssw0rd]

※テンプレートファイルは以下の文字列を保存したテキストファイルをあらかじめ用意しておきます。(MAの作成以後は使用しません)
 Name,givenName,sn,userPassword
※Join / Projection / Attribute FlowはCodeless Provisioningを使う場合は不要です。


MAが作成できたらMAを右クリックし[Create Extension Projects]をクリックします。
































ここではProject Typeに[Connected Data Source Extension]を選択し、プロジェクトを作成します。
プログラム言語は任意ですがここではC#を選んでいます。また、私は開発環境を別のPCに作っていたのでLaunch in VS.Net IDEのチェックを外しています。

いよいよカスタムMAの中身のロジックを実装していきます。


■カスタムMAの実装
出来上がったプロジェクトファイルをVisual Studioで開くとあらかじめ定義されたテンプレートが出来ているので、各メソッドを実装していきます。

その前に今回はGoogle AppsのProvisioning APIを使うので先にダウンロードしたライブラリへの参照設定を行います。
必要なのは、
・Google.GData.Apps.dll
・Google.GData.Client.dll
・Google.GData.Extensions.dll
への参照です。
















同様にusingでそれらライブラリへの参照を宣言します。

using Google.GData.Apps;
using Google.GData.Client;
using Google.GData.Extensions;


いよいよロジックの実装ですが、あらかじめ用意されているメソッドの中で今回必要となるのは以下のメソッドです。
メソッド名役割
BeginExportExport開始時に呼び出される
ExportEntryExport時に呼び出される(実際のExportロジック)
EndExportExport終了時に呼び出される


また、Google Appsに接続するためにAppsServiceというオブジェクトを使うので変数の宣言をしておきます。

namespace Miis_CallExport
{
 public class MACallExport :
  IMAExtensibleFileImport,
  IMAExtensibleCallExport
 {
  AppsService service; ← ここ


次にBeginExportの実装です。ここでは先ほど宣言したAppsServiceのオブジェクトを生成します。
BeginExportメソッドの引数の中のconnectTo,user,passwordは先ほどMAを作成したときに設定したものがわたってきますので、それらをそのまま使ってGoogel Appsへ接続します。

service = new AppsService(connectTo, user, password);


次に実際のExport時に呼び出されるExportEntryメソッドです。
ここでは引数としてわたってくるmodificationTypeを見て処理が分かれます。
modificationType処理
Addエントリの追加
Replaceエントリの更新
Deleteエントリの削除


まずはエントリの追加(modificationType=Add)の時ですが、Google Apps Provisioning APIでCreateUserというメソッドを利用します。
引数には同じくExportEntryメソッドの引数としてわたってくるcsentryの各属性値を渡します。
service.CreateUser(
  csentry["Name"].Value.ToString(),     ← 名前(ログインID)
  csentry["givenName"].Value.ToString(),   ← 名(First Name)
  csentry["sn"].Value.ToString(),       ← 姓(Family Name)
  csentry["userPassword"].Value.ToString()  ← パスワード
);



次はエントリの更新(modificationType=Replace)です。ここではUpdateUserメソッドを使います。
// ユーザの属性をセットする
UserEntry user = service.RetrieveUser(csentry["Name"].Value.ToString());
user.Name.FamilyName = csentry["sn"].Value.ToString();
user.Name.GivenName = csentry["givenName"].Value.ToString();
user.Login.Password = csentry["userPassword"].Value.ToString();
// ユーザを更新する
service.UpdateUser(user);



最後にエントリの削除(modificationType=Delete)です。ここではDeleteUserメソッドを使います。
service.DeleteUser(csentry["Name"].Value.ToString());



これらをswitch分で振り分けて各処理を実行させます。
switch (modificationType)
{
  case ModificationType.Add:
  // エントリの作成
   break;
  case ModificationType.Replace:
  // エントリの更新
   break;
  case ModificationType.Delete:
  // エントリの削除
   break;
}


尚、EndExportメソッドでは他にオブジェクトを生成した場合はオブジェクトの廃棄を行います。(今回は特に何も書きませんが)


長くなってしまいましたので、詳細なコードの解説、実際の使い方は次回解説をしたいと思います。
※コードはsourceforge.netにアップロードしてあるので解説不要の方はどうぞ。
 http://sourceforge.net/projects/fim2010mas/

2010年9月1日水曜日

@IT記事:Windowsで構築する、クラウド・サービスと社内システムのSSO

そういえば@ITさんでAD FS2.0を使ったクラウド・サービスとのシングル・サインオンを
中心としてアイデンティティ管理関連の記事を連載中です。
それなりにページビューもあるそうなので、皆様興味やニーズはあるんでしょうね。

先ほど何気にGoogleで「クラウド SSO」と検索したらその記事とこのblogが上位に来ていました。













某社のプレス発表も見えてますが。。



ちなみに現段階で公開されている記事の内容とURLは以下の通りです。

第1回 クラウド・コンピューティングとアイデンティティ管理の概要
http://www.atmarkit.co.jp/fwin2k/operation/adsf2sso01/adsf2sso01_01.html
 1.クラウド・コンピューティングの基礎と課題
 2.クラウドでのセキュリティ対策とアイデンティティ管理の役割
 3.クラウドがアイデンティティ管理システムにもたらす変化

第2回 クラウド・コンピューティング時代の認証技術
http://www.atmarkit.co.jp/fwin2k/operation/adfs2sso02/adfs2sso02_01.html

 1.アイデンティティ連携(フェデレーション)の要素技術
 2.マイクロソフトのアイデンティティに関するビジョン
 3.アイデンティティ・メタシステムの実装


第3回はまだ公開されていませんが、「クラウドサービスの活用例」として実際人AD FS2.0を使って各種クラウド・サービスとのシングル・サインオンを実装する手順を紹介する予定です。
対象サービスとして、
・Google Apps( GMail )
・Windows Live
・Salesforce.com CRM
・Windows Azure上にデプロイしたWIFを使ったASP.NETアプリケーション
・force.com


良ければ見てやってください。

2010年8月30日月曜日

[Silverlight+WIF+ADFS2.0] TechEd Japan 2010 BoF-09の資料公開など

先週8/25-27でTechEd Japan 2010に参加してきました。
今回は単なる聴講だけではなく、BoF (Birds of Feather) とLT (Lightning Talk) にも軽く参加させてもらいました。

LTはいずれマイクロソフトのサイトで資料公開されると思いますが、BoFについては資料は公開されないそうなので、こちらで公開しておきます。Silverlight Squareの@hr_saoさんとのコラボです。



内容を簡単に紹介しておくと、SilverlightアプリケーションからWIFを使って外部システム(ADFS2.0等)で認証を行うには、という話です。

利用シーンとして企業間のアプリケーション共有を想定しており、

・アプリケーションオーナーとなる企業から利用者となる企業のID管理をしたくない
 (これまではアプリケーションオーナーが全利用者のIDを管理していたが、本当は他の企業のユーザの管理はしたくない・・・)
 →WIF+ADFS、ADFSのIdP連携

・利用者はブラウザ特有のオペレーションではなく、もっとリッチなインターフェイスでアプリケーションを使いたい
 →Silverlightアプリケーションを使う(デモではインブラウザーを見せましたが、本当はブラウザ外実行をお見せしたかったです。今回は時間切れです。。。)

というシナリオでデモをしました。

詳細はスライドを見ていただければと思いますが、実際に環境を作る際に苦労したのはSilverlightから直接WIFを呼ぶことができないため、WCFのサービスでWIFをラッピングする仕掛けを作って、Silverlightからはそのサービスを呼び出す形にする必要があった点です。

まぁWIFの実装を含め細かい話はこの本にちょっと期待してます。



次にLTですが、資料は公開される見通しですが実はあんまり資料をベースに話をしていないので、ざっくり内容を。
テーマは「Azure上のアプリケーションへのシングルサインオン」ということでWindows Azure上にデプロイしたWIFを使ったアプリケーションとGoogle Apps (GMail)のSSOのデモと、逆にAppFabric Access Control Service (新しい方)を使ってWindows Azure上にデプロイしたWIFアプリケーションからGoogleの認証システムを使う、という2つのデモを紹介しました。
一つ目のデモはできればPCを使わずに、と思っていたのでDell StreakというAndroid OSで動く端末を使いたかったのですが、プロジェクターへの投影の関係で事前に撮影したムービーを紹介しました。

[ムービー]


一応資料も。



こちら(LT)では@tatsuakisakaiさん特別賞?として、「Windows Azureアプリケーション開発入門」をいただきました。



何にせよ非常に充実した3日間でした。
オンラインでは知っている人に初めてオフラインでお会い出来たりしましたし。

あと、BoFのセッションでもお話ししましたが今後はブラウザ外実行しているSilverlightの認証についても試してみたいので、本Blogでも情報のアップデートをしていきたいと思います。