2011年8月23日火曜日

9/9 OpenID TechNight Vol.8 in 大阪 が開催されます!

これまで Identity 関連の技術セミナが大阪で開催されることは殆どなかったのですが、今回初めて東京で大好評の OpenID TechNight が開催されることになりました。

このブログでも LiveID の OpenID 対応のエントリや AppFabric ACS への OpenID Provider の登録に関するエントリなど、 OpenID に関連するトピックスを紹介してきました。

なかなかエンタープライズでの利用シナリオが想像されないま状態が続いていますが、 OpenID 自体は各種ソーシャル・サービスで浸透来ていることもあり、コンシューマ向けのサービス開発者の方々を中心にこの OpenID TechNight は毎回大好評だったイベントです。

また、最近は OAuth2.0 との親和性も手伝って OpenID Connect という新しい考え方もホットで、米国 OpenID Foundation 理事の @_natさんを中心に Microsoft の Mike Jones 氏など ws-* や SAML の仕様を策定していた方々が集まって日々スペックを書いているようです。

今回のイベントは 8/5 に東京で開催された OpenID TechNight Vol.7 に引き続き OAuth2.0 / OpenID Connect を中心としたトピックが満載の予定です。(東京での Vol.7 には 100名以上の参加があったようです)

私も実は登壇予定で、開発者向けということで Windows Identity Foundation / AppFabric ACS を中心に OAuth や OpenID に関連した具体的なコードやデモを紹介しようと思います。具体的には ACS 経由で取得した Facebook のアクセス・トークンを SAML トークンに変換したものを WIF で Windows Azure 上にデプロイしたアプリケーションに渡し、Facebook Graph API を使って、色々と Facebook を弄ぶ、などといったことを考えています。

参加申し込み方法は以下のイベント紹介文の中に載っているので、これまで「良さそうなイベントだけど東京だよね~~」と思っていた関西人の方は是非ともご参加ください。


======================================================================
毎回好評のID専門セミナーが初の大阪開催! いまやWeb APIに欠かせない
OAuth/OpenIDの最新動向から、実サービスへの適用まで学べます!
======================================================================

9/9(金)OpenIDファウンデーション・ジャパン主催で、技術者向け無料セミ
ナー "OpenID TechNight Vol.8 in 大阪" を開催いたします。仕様が策定中の
OpenID Connect と OAuth 2.0 の最新状況や、ID プロバイダーの取り組みにつ
いてご紹介します。

お申し込みは以下のいずれかのサイトからお願い致します。
http://atnd.org/events/19093
http://www.openid.or.jp/modules/news/details.php?bid=46
----------------------------------------------------------------------
■日時:
 2011年 9月 9日(金) 16:00 ~ 18:30(開場15:30 ~)

■場所:
 株式会社ケイ・オプティコム 16階 会議室
(大阪市北区中之島3-3-23 中之島ダイビル)
 http://www.k-opti.com/company/access/

■プレゼンテーション(予定):

・「OpenID Connect latest spec」 by @ritou
・「OAuth latest spec」 by @nov
・「Microsoft の Restful Identity」 by @phr_eidentity
・「eoID の OpenID 化について」 by K-Opticom

■対象:
・Restful な Identity 技術にご興味をお持ちの方。
・Twitter / Facebook / Google / mixi などの API を触ったことがある方、
 これから勉強してみたいと思っている方。

■インターネット中継:
 当日の模様は Ustream の以下の URL にて中継する予定です。
 http://www.ustream.tv/channel/openid-tech-night

■Twitterハッシュタグ:
 #openid #technight


■過去の模様はこちら:
・2011/08/05 OpenID TechNight Vol. 7
 http://atnd.org/events/18104
・2010/05/28 OpenID TechNight Vol. 6
 http://gihyo.jp/news/report/2010/06/0101

WIF Extension for OAuth CTP1 を試してみる

4月にリリースされてからしばらく時間がたちますが、Windows Identity Foundation Extension for OAuth CTP 1-4(WIF Extension for OAuth)の中に入っているサンプルを動かしてみたいと思います。


■サンプルの内容
このサンプルでは AppFabric ACS を OAuth の認可サーバとして利用し、Contoso Customer Information サービスから顧客情報をユーザの同意に基づき取得する、というシナリオです。













登場するコンポーネントは、

・ユーザ:ブラウザ
・コンシューマ:Fabrilam Information Portal(WIF Extension for OAuth を利用したクライアント)
・認可サーバ:ACS2.0
・リソースサーバ:Contoso Customer Information Service(WIF Extension for OAuth を利用した OAuth Protection モジュール)

の4つで、各コンポーネントのアクセスフローは以下の通りです。
1.ユーザがコンシューマへアクセスする
2.コンシューマはリソースサーバのログオンページへリダイレクトする
3.ユーザはIDとパスワードでリソースサーバで認証を受ける
4.ユーザはリソースへのアクセスに関する同意を行う
5.リソースサーバは認可サーバから認可コードを取得する
6.リソースサーバは認可コードをコンシューマへ渡す
7.コンシューマは認可コードを元に認可サーバからアクセストークンとリフレッシュトークンを取得する
8.コンシューマはアクセストークンをリソースサーバへ渡しリソースを取得する
9.コンシューマは取得したリソースをユーザへ返す

図示すると以下の様な形になります。
















■サンプルのセットアップ準備
早速ですがサンプルをセットアップしてみます。まずは必要物をそろえます。
現在 CTP 版のモジュールは connect サイトでダウンロードできます。

  ダウンロードURL:https://connect.microsoft.com/site1168/Downloads

また、前提となる環境は以下の通りです。
  PC(私は Windows 7 x64 を利用しました)
  ・IIS
  ・Visual Studio 2010
  Windows Azure AppFabric Access Control Service
  ・v2 で適当な名前空間を一つ


■サンプルのセットアップ
1.ACS へサービス ID を追加する
 ACS のサービスの設定 -> サービス ID よりサービス ID を追加し、以下の情報を設定します。

 サービス ID の設定
  名前:FabrikamClient
 資格情報の設定
  型:パスワード
  パスワード:FabrikamSecret






















2.ACS へ証明書利用者アプリケーションを追加する
 同じく ACS より Relying Party ( 証明書利用者アプリケーション ) を追加します。

 証明書利用者アプリケーションの設定
  名前:Customer Information Service
  領域:http://contoso/CustomerInformationService/
  戻り先URL:http://localhost/
  トークン形式:SWT
 認証の設定
  IDプロバイダー:チェックを外す
 トークン署名キー
  生成 をクリックして生成する









































3.Visual Studio でサンプル・ソリューションを開き編集する
 次は先ほどのダウンロードしたモジュールを解凍した中にある「OAuth with ACS.sln」を管理者として開き、以下の設定を行います。

・SamplesConfiguration.cs の編集
  ServiceNamespace : ACS の名前空間
  ManagementServiceIdentityKey : 管理サービスの ManagementClient の資格情報の対象キーの値
  RelyingPartySigningKey : 2で設定した証明書利用者アプリケーションのトークン署名キーの値
















・ソリューションエクスプローラから ConfigureAcsConsoleApplication を右クリックして「デバッグ -> 新しいインスタンスを開始」をクリック
  → コンソールが起動するので、 Press any key to exit と表示されたら何かキーを押してアプリケーションを閉じる
 ※このコンソールアプリケーションが ACS の IdP 設定などを行います。














・HTTPSでのアクセスを行う際のチェックを無効化する(そのままだとWeb例外「"基礎になる接続が閉じられました: SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした"」が発生する)

 WebClient の Defalut.aspx.cs の GetAllInformation メソッドの初めに以下のコードを追加する
 if (System.Net.ServicePointManager.ServerCertificateValidationCallback == null)
 {
  System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate(Object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
  {
   return true;
  };
 }


・ソリューションをビルドする


■サンプルの実行
 いよいよソリューションの実行です。

1.ブラウザより https://localhost/WebClient/ へアクセスする
  画面が表示されたら Populate all data をクリックする











2.CONTOSO CUSTOMER INFORMATION SERVICE へログオンする
  ログオン画面へリダイレクトされるので
  ・User Name : john
  ・Password : password
  を入力してログインする


















3.リソースへのアクセスに関する同意を行う
  同意を求められるので Yes を選択し、Submit する












4.リソースの表示
  元の画面にリダイレクトされ、リソースが表示される















  同様にアクセストークン、リフレッシュトークンに関する情報も表示されます。











いかがでしょうか? SAML もそうですが、OAuth もやはり実際の動きを見てみないと動きのイメージがつかないものだと思いますので、イメージをつかむためにも一度実際に動くものを見てみるのが理解を早めると思います。一度是非試してみてください。

2011年7月28日木曜日

FIM 2010R2 ベータ版リリース

昨年冬頃からクローズド・ベータの評価をしていた Forefront Identity Manager 2010 ( FIM 2010 ) の次期リリースである FIM 2010 R2 のベータ版が connect サイトにアップロードされています。(利用するには登録が必要です)

今回のリリースでは、以下の点が強化されています。
・レポーティング
・Webベースでのセルフ・サービス・パスワード・リセット(SSPR)
・FIMデータベースのパフォーマンス改善
・FIM Add-In の Outlook 2010 サポート
・Sharepoint 2010 のサポート
・トラブルシューティングの改善

また、同時に Extensible Connectivity 2.0 Management Agent (ECMA2)のベータ版もリリースされています。
これはクローズド・ベータのころは EZMA と呼ばれていたものなのですが、要はカスタム MA を開発するためのフレームワークです。( MIIS/ILM 時代の XMA、FIM2010 の Management Agent for Extensible Connectivity )

機能としては以下の様なものが挙げられています。
・file-base の import/export
・call-base の import/export
・カスタムパラメータを柔軟に設定可能
・Synchronization Manager上で簡単に設定するためにデザインモードおよびパッケージモードの2つのモードで動作
・LDAPとデータベースの拡張スキーマをサポート
・一括エクスポートとインポートをサポート
・複数のパーティションをサポート
・Visual Studio用のプロジェクトテンプレートを提供

最近なかなか実際に試す時間が取れていないのですが、新機能が沢山あるのでいろいろと試さねば、、です。

2011年7月27日水曜日

ACSのクレームルール拡張

前回のエントリにも書いた通り、July 2011 リリースで ACS のクレームマッピングが拡張されています。

具体的には Identity Provider(IdP) から ACS に渡ってくるトークンを変換する際に、2つのクレームの値を条件として出力ルールを記載することが可能になりました。

といっても、何のことかよくわからないと思いますので ACS がトークンをどのように扱うのか?についておさらいしておきます。

ACS の基本的な機能として、IdP が発行したトークンを Relying Party(RP) が理解できる形へ変換する、いわゆる Federation Provider 機能があります。














このトークン変換を行う際に利用されるのが規則グループです。
ACS は IdP からトークンが渡ってくるとトークンからクレームを取り出し、規則グループの条件に従って、RPへ出力するトークンへクレームを再構成します。

条件としては、入力側のクレームについて
・発行元
・タイプ
・値
を指定することになります。
この条件に合致した時に出力側のクレームのタイプと値を決める、という形の処理を行います。

例えば、「Googleが発行したクレームでemailaddressの値がxxxx@gmail.com」なら「roleの値にadminをセットしたトークンを発行する」といったことが出来ます。


今回の ACS の拡張に話を戻すと、この入力側の条件が2つ設定できるようになったというのが拡張の内容です。

つまり、「Googleが発行したクレームでemailaddressの値がxxx@gmail.com、且つnameの値がNaohiro Fujieだったら」という様な条件を記載することが出来るようになっています。(ちなみに2つの条件として設定できるクレームの発行元は同一もしくは片方は ACS が他のルールで出力した結果である必要があります)


実際にやってみます。
設定した条件は、
・条件1
 ・トークン発行元:Google
 ・タイプ:emailaddress
 ・値:xxxx@gmail.com
・条件2
 ・トークン発行元:Google
 ・タイプ:name
 ・値:Naohiro Fujie
に合致したら、
・タイプ:role
・値:管理者
を出力するという設定にします。


まずは規則グループの設定です。
■条件1の設定
















■条件2の設定














■結果の設定












実際に出力されたトークンを Security Token Visualizer で見てみると、条件に合致した結果、role に「管理者」という値がセットされていることがわかります。







これを組み合わせるとかなり複雑なトークン変換を行うことが出来るようになり、例えば RP 側でのアクセス制御をより詳細に設定するようなことも出来る様になるはずです。

2011年7月26日火曜日

ACSはアクセス制御サービス

Windows Azure AppFabric の July 2011 Release でまたまたダイナミックにサービスが拡張されています。

ポイントは、以下の通りです。

■AppFabric 全体
・ローカライズ
 日本語、ドイツ語、簡体字中国語、繁体字中国語、フランス語、イタリア語、スペイン語、韓国語、ロシア語、ポルトガル語が新しくサポートされ英語を合わせて全部で11の言語がサポートされました。

・複数管理者のサポート
 複数のアカウントでサービスの管理を行うことが出来るようになりました。

■ACS
・入力条件として2つまでのクレームをサポート
 入力トークンの判別条件として2つまでのクレームを利用できるようになりました。
 ※これは別途詳細を書きたいと思います。

・OAuth2.0のレスポンスのエンコードとしてUTF-8をサポート
 これまではUS-ACIIのみでしたがUTF-8が利用できるようになりました。

・クォータ制限の廃止
 Identity Providerなど同一ネームスペース内に作成するオブジェクト数の制限が撤廃されました。



ACSのクレーム変換ルールの変更はルール記述のやり方に結構インパクトがありそうなので別途エントリで紹介したいと思いますので、今回はローカライズについて。


■管理ポータル











■ACSの管理画面















・Identity Provider = ID プロバイダ
・Relying Party = 証明書利用者アプリケーション
・Rule Group = 規則グループ
なんですね。
AD FS2.0とはあわせなかったあたりがww、、な感じです。

2011年7月24日日曜日

MCTS:Forefront Identity Manager 2010, Configuring

少し前にUSのMCTS試験チームからアンケートがあり、FIM2010のMCTS試験が始まることは知っていたのですが、ようやくベータ版試験が提供され始めたようです。(といっても日本のプロメトリックからは申し込めませんが。。。)

71-158, TS: Forefront Identity Manager 2010 beta

7/15から8/4限定の申し込みのようですので、もしベータ試験の提供されている地域に住んでいらっしゃれば申し込んでみては?

ちなみに試験準備ガイドも提供されています。
http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-158&Locale=en-us#tab3

内容は以下の通りです。
Planning a FIM Implementation and Installing FIM
  • Plan and design FIM topology.
    • This objective may include but is not limited to: identify single point of failure; match topology to performance requirements; capacity planning; design highly available implementations for FIM Service and Portal
  • Install the FIM Service and the FIM Portal.
    • This objective may include but is not limited to: Microsoft SharePoint web configuration; service account permissions; prerequisites; certificates; groups
  • Upgrade Microsoft Identity Integration Server (MIIS)/Microsoft Identity Lifecycle Manager (ILM) to FIM 2010.
    • This objective may include but is not limited to: plan for upgrade; recompiling extensions; upgrading SQL databases; upgrading third-party clients
  • Deploy and manage client components.
    • This objective may include but is not limited to: automated installs; client images; multilanguage support installation; plan for configuration of Microsoft Outlook for group management (Outlook plug-in for approvals and group management); use Group Policy objects (GPOs) to manage FIM client components; registry settings on client machines
  • Implement disaster recovery for FIM 2010.
    • This objective may include but is not limited to: backup and restore; FIM Service, FIM Portal; Sync Service; initial load scenarios; key backup and recovery
Planning and Configuring Core Portal Functionality
  • Plan and configure user and group provisioning.
    • This objective may include but is not limited to: provisioning to Active Directory; deprovisioning; data-driven provisioning and deprovisioning; configure Management Policy Rules (MPR) /workflow/sync rule triples required for provisioning in the portal; expected rule entries; detected rule entries; workflow parameters
  • Plan and configure group management.
    • This objective may include but is not limited to: configure dynamic groups (query-based) in the portal; owner-based groups and approvals; distribution groups; security groups
  • Plan and configure synchronization rules.
    • This objective may include but is not limited to: inbound and outbound sync rules; create objects in metaverse using declarative rules; advanced attribute flows; relationships
  • Plan and configure authorization and action workflows.
    • This objective may include but is not limited to: configure approvals including multiple approvals and escalations; notifications; deploying and configuring custom workflow activities
  • Plan and configure security permissions and Management Policy Rules (MPRs).
    • This objective may include but is not limited to: delegated administration; plan and implement user profile self-service; plan and implement group self-service; temporal objects; sets and set membership
Configuring Advanced Portal-Based Scenarios
  • Configure the Resource Control Display Configuration (RCDC) for object and attribute display.
    • This objective may include but is not limited to: RCDC capabilities; validations; attribute permissions; data sources and data binding; form controls
  • Customize the user experience.
    • This objective may include but is not limited to: search scopes; menu navigation items; organizational branding; home page configuration; create and configure email templates; usage keywords
  • Extend the portal schema.
    • This objective may include but is not limited to: resource types; attributes; bindings; schema validation; synchronization filter
  • Plan and configure self-service password reset and registration.
    • This objective may include but is not limited to: authentication workflow for password reset and registration; QA gates; case sensitivity; lockout gates; password reset action workflow activity
  • Write and interpret XPath queries.
    • This objective may include but is not limited to: create valid FIM XPath filters; reference objects and attributes; filters; conditions
Configuring FIM Synchronization
  • Create and configure standard management agents (MAs).
    • This objective may include but is not limited to: SQL Server MA; Certificate Management MA; Active Directory MA; file-based MAs; difference between call-based and file-based MAs; attribute flows; filters; projection rules; join rules; deprovisioning rules
  • Create and configure the FIM Service MA.
    • This objective may include but is not limited to: resource type mapping; Synchronization Rule filter; understand the constraints of the FIM MA; attribute flow
  • Configure the metaverse.
    • This objective may include but is not limited to: plan precedence; extend the schema; object deletion rules
  • Create and automate run profiles.
    • This objective may include but is not limited to: clearing run history; multistep run profiles; run sequencing
  • Implement rules extensions.
  • Install and configure password synchronization and Password Change Notification Service (PCNS).
    • This objective may include but is not limited to: configure Active Directory MA; install services on domain controllers; schema changes related to PCNS; service principal names
Monitoring and Maintaining FIM
  • Migrate the FIM configuration between environments.
    • This objective may include but is not limited to: FIM portal configuration; DLLs and code; synchronization service server configuration; run scripts and automation tools; PowerShell scripts; how to move configurations from development to test to production
  • Perform root cause analysis of provisioning issues.
    • This objective may include but is not limited to: issues with management policy rules, set definitions, workflows, and expected rule entries; misconfiguration of synchronization service server; coexistence of classic provisioning and declarative provisioning; result sequence
  • Perform root cause analysis of issues related to password management.
    • This objective may include but is not limited to: issues with password synchronization and; self-service password reset; requirements for registration; end-to-end process
  • Perform root cause analysis of issues related to data flow and unexpected data.
    • This objective may include but is not limited to: data discovery issues; join issues; filter issues; run profile issues; threshold issues; Stack trace; precedence issues; object deletion rules
  • Perform root cause analysis of permissions issues.
    • This objective may include but is not limited to: MPR definitions; set definitions; portal permission errors; service account permissions; provisioning issues; synchronization service server roles

2011年7月17日日曜日

[ACSv2] Powershell で ACS を管理する - その2 -

前回のポストで紹介した PowerShell のコマンドレットで ACSv2 の Management Service を操作する方法の件ですが、早くも CodePlex にコマンドレットの新版が公開されました。

以下の点が変更されています。

■複数形での指定がなくなった
PowerShell のお作法にのっとり、Get-hogehoge*s* ではなく Get-hogehoge で引数を省略することで対象をすべて取得する

例えば、登録されているIdPをすべて取得する場合、以前のバージョンでは
 Get-IdentityProviders
を使っていましたが新版では特定のIdPの情報を取得する際に使っていた
 Get-IdentityProvider
に -Name で IdP 名を指定せずに使うことになります。

特定の IdP の情報を取得する(旧版と変わらず)
 Get-IdentityProvider -Namespace xxxx -ManagementKey yyyy -Name zzzz
登録されている IdP をすべて取得する(旧版では Get-IdentityProviders)
 Get-IdentityProvider -Namespace xxxx -ManagementKey yyyy

■100以上のエントリ取得に対応
旧版では100以上のエントリが存在している場合は情報の取得ができませんでしたが、新版では改善されているようです。

■ServiceIdentity および ServiceIdentityKey に関するコマンドレットの追加
旧版では ServiceIdentity および ServiceIdentityKey に関する操作が出来ませんでしたが以下のコマンドレットが追加され、操作を行うことが可能となりました。

以下が新しく追加されたコマンドレットです。
種別コマンドレット名概要引数説明
Service IdentityAdd-ServiceIdentityService Identity を追加する-ServiceIdentityService Identity オブジェクト
-NameService Identity 名
-Description説明
Get-ServiceIdentityService Identity 情報を取得する-NameService Identity 名
Remove-ServiceIdentityService Identity を削除する-NameService Identity 名
Service IdentityKeyAdd-ServiceIdentityKeyService IdentityKey を追加する-ServiceIdentityKeyService IdentityKey オブジェクト
-NameService IdentityKey 名
-ServiceIdentityName対象 Service Identity 名
-Key対象鍵(256bit)
-Password *1パスワード
-Certificate *1X.509 証明書
-EffectiveDate *1開始日
-ExpirationDate有効期限
Get-ServiceIdentityKeyService IdentityKey 情報を取得する-IdService IdentityKey の Id
-ServiceIdentityName対象 Service Identity 名
Remove-ServiceIdentityKeyService IdentityKey を削除する-IdService IdentityKey の Id
-ServiceIdentityName対象 Service Identity 名

*1) Key / Password / Certificate はどれかを選択

■Add-系のコマンドレッドの引数にGet-系で取得したオブジェクトを指定可能となった
例えば$RP = Get-RelyingParty -Name xxx ... で取得したオブジェクト($RP)を Add-RelyingParty -RelyingParty $RP ... という形で指定できるようになっています。このことで特定 NameSpace に設定されている Relying Party をそのまま別の NameSpace へコピーすることが出来るようになっています。


■設定のバックアップ/リストア用のサンプルスクリプトの提供
これは直接はコマンドレットではないのですが、セットアップしたフォルダ配下に設定のバックアップやリストアを行うためのサンプルが提供されています。

バックアップ用:ExportNamespace.ps1
リストア用:ImportNamespace.ps1



これで、Web管理画面からできることはあらかた出来るようになってきました。
自動化や手順化をする上では非常に役立つツールだと思います。