Quantcast
Channel: IdM実験室
Viewing all 771 articles
Browse latest View live

[WAAD]アップデートラッシュ

$
0
0
最近、Windows Azure Active Directory(WAAD) 周りの機能がどんどんアップデートされています。
例えば、
・アプリケーションアクセス機能の正式リリース
・Graph API のバージョンアップ
・WAAD Premium のプレビュー版のリリース
など、楽しい?機能がたくさん登場してきています。

ちょうど今月は昨年に引き続き Windows Azure Advent Calendarに参加する予定なので、徐々にネタ探しをしているのですが、今回はウォーミングアップということで軽く小ネタを。

先にあげたアップデートのうち、アプリケーションアクセス機能については、以前のポストでも紹介しましたが、2つほど小ネタを紹介します。

一つ目は、アプリケーションパネルへのアクセス URL です。

前回のポストでは以下のような長い URL を紹介していました。
 https://account.activedirectory.windowsazure.com/applications

しかし、結構長いのでエンドユーザに展開するのが面倒、という方には以下の短い URL を使ってもアクセスできるのでこちらがおススメです。
 https://myapps.microsoft.com


次に、利用者がアプリケーションパネルを使っている最中に管理者が新しいアプリケーションを割り当てたらどうなるのか?という話です。
ログアウト~再ログインするまでアプリケーションが使えないのか、単純にページをリロードすれば使えるようになるのか???

答えは単純にリロードすれば OK です。

この状態で、、、


管理者がアプリケーションにユーザを割り当てると、、、


ページをリロードすると新しいアプリケーションが表示されます。



それだけです。
ほんとに小ネタでした。



[WAAD/IDMaaS]SaaSアプリケーションのID管理をクラウドで行う「ハイブリッド ID 管理」

$
0
0
# Windows Azure Advent Calendar向けポストです。

Windows Azure Active Directory(WAAD)のアプリケーション統合の機能を使うと Google Apps や Salesforce.com などの各種 SaaS アプリケーションへのシングルサインオンやプロビジョニングを WAAD 経由で実施することができます。いわゆる、IdMaaS(Identity Management as a Service)というやつです。

WAAD のアプリケーション・パネル(https://myapps.microsoft.com


今回はこの機能をうまく使って、企業などの組織が行ってきた各種サービスへの個別の ID 管理やシングルサインオン環境構築をどこまで省力化できるか、を検証してみたいと思います。


前提となる環境、利用する機能は以下です。

  • WAAD のアプリケーション統合機能
  • 先日発表された WAAD Premium の機能である、アプリケーションへのグループの割り当て機能(現在プレビュー)
  • 社内の ID 情報ソースと WAAD のアカウントおよびグループ同期(ディレクトリ同期ツールや Forefront Identity Manager/FIM の WAAD コネクタなど)もしくは WAAD Graph API によるアカウント・グループ管理(今回は Graph API を利用)



では早速始めます。

◆IdM をオンプレミスで構築する(おさらい)

例えば、Google Apps や Salesforce.com などのクラウド・サービスの ID を社内から管理したいと考えた場合、FIM をはじめとする ID 管理製品の各種サービスとのコネクタを構築(もしくは購入)して、それぞれのサービスと接続して ID 情報を同期する必要がありました。

参考)FIM2010 用の GoogleApps コネクタ
 https://fim2010gapps.codeplex.com/


◆IdMaaS の登場

各種 SaaS サービスと個別に接続する、というアプローチは非常に柔軟ですが、一方で各サービスのインターフェイスや API の変更へ追従していくのが非常に大変、、という側面を持ちます。
そこで、各種 SaaS サービスとの接続自体をクラウド・サービスとして提供しよう、という考え方である、Identity Management as a Service(IdMaaS)という考え方が登場し、Microsoft の Windows Azure をはじめ、PingIdentity の PingOne や Salesforce の Salesdorce Identity や Intel/McAfee の Intel Cloud SSO など各種サービス業者がサービスを展開し始めています。

参考)これまで紹介してきたエントリ
Windows Azure Active Directory(http://www.windowsazure.com
 [WAAD] IDaaS としての機能が充実してきた
 http://idmlab.eidentity.jp/2013/07/waad-idaas.html

PingOne(https://www.pingone.com/
 [IDaaS]PingIdentity Cloud Desktop で便利ライフ
 http://idmlab.eidentity.jp/2013/10/idaaspingidentity-cloud-desktop.html

Intel Cloud SSO(http://www.intelcloudsso.com
 [IDaaS] Intel Cloud SSO を試してみた
 http://idmlab.eidentity.jp/2012/05/idaas-intel-cloud-sso.html


◆IdMaaS で ID 管理を楽にする

WAAD をはじめ、各種 IdMaaS サービスには各種 SaaS サービスへのプロビジョニング機能があるため、こんなことが成立します。



これであれば、社内の ID 管理システムは IdMaaS とさえ接続しておけば、あとは IdMaaS 側でインターフェイスの保証などをしてくれるので、社内の ID 管理システムを個別に各システムと接続する必要も、各サービスのインターフェイスや API の更改に神経をとがらせる必要もありません。


◆IdMaaS の運用をどこまで自動化できるのか

ここまでで勘の良い方ならお分かりだと思いますが、IdMaaS への ID 同期とその先の各種サービスへのプロビジョニングをどこまで細かく制御できるのか?という課題が出てきます。
一般的な ID 管理システムではここでいう IdMaaS への接続と同期はコントロールできても、その先のコントロールについては IdMaaS 側にお任せ、ということになるはずです。

となるとオンプレミスの ID 管理システムや運用システムから IdMaaS の管理をどこまで自動化できるかがポイントになってきます。


◆WAAD の場合。Graph API の活用?

WAAD の場合は個人 ID などのディレクトリ上のオブジェクトの操作をプログラムから行うための API として Graph API を提供しています。

参考)[Office 365 & WAAD] Graph API を利用したアイデンティティ管理
 http://idmlab.eidentity.jp/2012/12/office-365-waad-graph-api.html
 ※ちょうど一年前の Advent Calendar 向けの記事

例えば、特定のユーザに Google Apps など WAAD と統合されたアプリケーションを使わせたい、と考えた場合はこの Graph API で、対象ユーザへアプリケーション割り当てを行うことができれば、オンプレミスの ID 管理ツールから WAAD およびその先にあるサービスへのプロビジョニングまでをコントロールすることが出来そうです。

先月新バージョンがリリースされた Graph API の機能の概要を metadata エンドポイントを探索することで確認してみます。

2013/11/08 版 API)
 http://blogs.msdn.com/b/aadgraphteam/archive/2013/11/14/announcing-the-new-version-of-the-graph-api-api-version-2013-11-08.aspx


要するに WAAD と統合したアプリケーションに Graph API からアクセスできれば良いので、アプリケーションに関するどんな操作が可能かを調べてみます。

アクセストークンを WAAD の OAuth2.0 の Token エンドポイントから取得して Authorization ヘッダにセットした状態で、Graph API の metadata にアクセスしてみます。

metadata の確認は以下の URL へ GET します。
https://graph.windows.net/<テナントドメイン名>/#metadata?api-version=2013-11-08

すると、以下の答えが返ってきます。
{
    "name" : <テナントドメイン名>",
    "services" : [
       "https://graph.windows.net/<テナントドメイン名>/users",
       "https://graph.windows.net/<テナントドメイン名>/applications",
       "https://graph.windows.net/<テナントドメイン名>/contacts",
       "https://graph.windows.net/<テナントドメイン名>/groups",
       "https://graph.windows.net/<テナントドメイン名>/roles",
       "https://graph.windows.net/<テナントドメイン名>/servicePrincipals",
       "https://graph.windows.net/<テナントドメイン名>/tenantDetails",
       "https://graph.windows.net/<テナントドメイン名>/devices",
       "https://graph.windows.net/<テナントドメイン名>/subscribedSkus",
       "https://graph.windows.net/<テナントドメイン名>/permissions",
       "https://graph.windows.net/<テナントドメイン名>/directoryObjects"
    ]
}


Windows Server 2012 R2 から実装された Device Registration Service(DRS)に関するエンドポイントも存在しています。いよいよ WAAD 側でも DRS が実装されるようです。

今回はアプリケーション統合関係なので /appication というエンドポイントを見てみます。
まずは一覧を GET してみます。

https://graph.windows.net/<テナントドメイン名>/applications?api-version=2013-11-08

を GET すると、WAAD に統合したアプリケーションに関する情報が JSON 形式で出てきます。

が、ここで表示・管理できるのは、組織で開発中のアプリケーション、つまり Google Apps や Salesforce.com などの SaaS アプリケーション以外の自作アプリケーションや API に関してのみの様です。

これでは、特定のユーザを WAAD を経由して Google Apps を使わせる、ということが出来ません。


◆WAAD Premium のグループ管理機能の登場

Graph API で個別のユーザに直接 SaaS アプリケーションを割り当てることは難しそうです。
そこで登場するのが、現在プレビュー公開されている WAAD Premium の機能である、SaaS アプリケーションの割り当てを個人単位ではなく、グループ単位で実施する機能です。

これであれば、グループへのメンバ登録は Graph API で実行できるので、あらかじめ特定のグループを SaaS アプリケーションへ割り当てておけば、結果的にユーザに対してアプリケーションを割り当てることが出来そうです。

まずは、グループを作成し、アプリケーションへグループを割り当てます。


すると、グループメンバになっているユーザにアプリケーションが自動的に割り当てられます。(継承としてアサインされる)


どうやらうまくいきました。
Google Apps 上にもユーザが作成されています。

注1)現在の仕様では WAAD から Google Apps 上に新規作成されたユーザは「停止済み」状態になっているので、個別に有効化する必要があります)
注2)現状、グループ単位でのアプリケーション割り当ては Salesforce では使えません。


◆再度自動化にチャレンジ

ここまで管理画面から実行した操作を Graph API で自動化できればオンプレミスの ID 管理システムから WAAD を経由して SaaS アプリケーションを使える状態にする、というところまで持っていけそうです。

ここは実は非常に簡単で、対象のグループの URI に対してメンバとして参加させたいユーザの URI をリンクする、という操作で実現できます。

エンドポイント:https://graph.windows.net/<テナントドメイン名>/groups/<グループのオブジェクトID>/$links/members?api-version=2013-11-08
メソッド:POST
ボディ:
{
"url":"https://graph.windows.net/<テナントドメイン名>/users/<ユーザのオブジェクトID>"
}

これで、先ほど手動で実施したユーザのグループへの追加(結果としてアプリケーションへの割り当て)が自動化できました。
グループへの追加の条件をオンプレミスの ID 管理ツールで調整してやれば、割り当て後のユーザの状態など少々課題は残りますが、かなり柔軟にアプリケーションへのアクセス制御が実現できそうです。

いかがでしょうか?
IdMaaS というと全面的にアイデンティティ情報をクラウドに預けてクラウド上でのみ ID 管理をする、というイメージがあるかもしれませんが、このようにうまくオンプレミスと連携することで、効率の良い環境構築が出来る可能性がある、と言うことが出来ますので、今後 SaaS アプリケーションを企業内から活用する、というシーンを想定する場合はこのようなハイブリッド ID 管理シナリオも検討してみる価値はあるかも知れません。

[FIM2010]いよいよ次世代へのロードマップが見えてきた

$
0
0
MIIS(Microsoft Identity Integration Server)からILM(Identity Lifecycle Manager)、ILMからFIM(Forefront Identity Manager)へと名前を変えてきたこのプロダクトですが、次の方向性がようやく見えてきました。

参考)FIMの歴史。以前.NETラボのセミナで使ったスライド


2013/12/17付けの Technet の Server & Cloud Blog で次の製品の方向性が発表されています。

 Important Changes to the Forefront Product Line
 http://blogs.technet.com/b/server-cloud/archive/2013/12/17/important-changes-to-the-forefront-product-line.aspx


blog によると、2015年の第1半期にメジャーリリースが出て、

  • Windows Azure Active Directoryとのハイブリッドシナリオ
  • ユーザとアクセス管理
  • 監査とコンプライアンス

というあたりがキーワードになりそうです。

追って詳細情報も出てくると思われるので、続報があれば書いていきたいと思います。


出ました!「OpenID Connect と SCIM のエンタープライズ利用ガイドライン」

$
0
0
OpenID、OpenID Connect、OAuth、SCIM なんていうキーワードが出てくると中々一般企業での利用のイメージがわかないのが現実だと思います。

OpenIDファウンデーション・ジャパンでは、そんな危機感の元、エンタープライズ・アイデンティティ・ワーキンググループというものを立ち上げて、企業内で OpenID Connect や SCIM の利用を促進するにはどうすれば良いのか?の検討を重ねてきました。
(以前から私も参加している日本ネットワークセキュリティ協会 / JNSA のアイデンティティ管理ワーキンググループとの共同ワーキングなので、私は両方の顔で参加しています)

実は本業が忙しく、それほどどっぶりと成果物を作成する作業には入れなかったのですが、みなさんの努力の結果、「OpenID Connect と SCIM のエンタープライズ利用ガイドライン」という形で資料を公開することが出来ました。

OpenID ファウンデーション・ジャパンの Web ページからダウンロード出来ます。

 OpenID ファウンデーション・ジャパンのお知らせページ


目次を一部ご紹介しますと、、
  • エンタープライズITにおけるフェデレーション標準プロトコルとアイデンティティ・プロビジョニング標準プロトコルの有用性
  • フェデレーション標準プロトコル~OpenID Connect解説
  • アイデンティティ・プロビジョニング標準プロトコル~SCIM解説
  • フェデレーションとアイデンティティ・プロビジョニング標準プロトコルの日本エンタープライズITへの適用
  • OpenID Connect/SCIMユースケース
  • 関連技術/概念

内容的に、日本のエンタープライズITの独自の事情について記載があったり、OpenID Connect / SCIM の技術解説があったり、関連技術としてのトラストフレームワークの話があったり、と盛りだくさんなので技術者の方にも、そうでない方にとっても役に立つ資料になっていると思われます。

OpenIDファウンデーション・ジャパンの会員企業になるともう少し深い内容について情報入手が可能ですが、今回一般に公開されたものでもかなり有用なので是非、ご覧下さい。


[OAuth]年末大掃除。Facebookへのアクセス許可の整理

$
0
0
番外編です。
年末なので色々とPC環境やFacebook等の設定の整理をしています。

Facebookを使っていると、色々なアプリケーションやWebサイトに「いいね!」をしたり、プロフィール情報の読み取りや投稿許可を与えたりしてしまう(せざるを得ない)事があると思います。(この辺りがOAuthです)

あんまりアクセス許可を与えっぱなしにしておくのも気持ちが悪いのでいい機会なのでまとめて整理をしてしまいましょう。

まずは、「いいね!」をしてしまったWebサイトやFacebookページの整理です。

自分のプロフィールのアクティビティを開きます。

左下に「ページと趣味、関心」があるので、開きます。

色々なページに「いいね!」をしているのがわかります。
「いいね!」を取り消すにはそれぞれにある鉛筆マークをクリックします。
※実際にJICSのサイトの「いいね!」を消したらダメですよ(これ重要)



次に、アプリに与えてしまった許可の整理です。

こちらはプライバシー設定の中にあります。
画面右上のメニューからプライバシー設定を開きます。


続いてプライバシー設定画面の左下のアプリを開きます。

すると許可を与えたアプリの一覧が表示されます。
結構な数のアプリを使ってます。


ここで編集をクリックすると具体的にどんな許可を与えているのかをみることができます。

Amazonアプリ、結構な権限を要求してきています。。。。
ここで不要だと思ったら×をクリックして権限ごとに削除してしまうのも良いですし、アプリケーション単位で許可を取り消してしまうこともできます。

でも、消す前に具体的にアプリがいつ、何をしたのか?について見たければ、最終アクセスの中の「詳細を見る」をクリックすると履歴が見れます。

ちょこちょこ覗かれてますね。

信頼できるアプリやページであればいいですが、間違って許可を与えてしまった場合などはこの辺りで適切に管理をしてあげましょう。



と、いうことで年末の大掃除の一環でFacebookの権限周りを整理してみました。
皆さんもこの機会にぜひ大掃除をして良い年をお迎えください。

今年もお世話になりました。

MVP Renewal 5th !!

$
0
0
と、言うことで5年目突入しました。今年も Forefront Identity Manager の MVP を受賞いたしました。



振り返ると昨年は Windows Azure Active Directory(WAAD)の正式リリースなど、アイデンティティ・サービスのクラウド化(IDaaS)が大きなテーマだったと思います。また、その動きに伴いトラストフレームワークの重要性がエンタープライズにおいても認識されてき始めている、というところだと思います。

今年は早々に Japan Identity & Cloud Summit 2014(JICS)や Network Security Forum 2014(NSF)とイベント三昧で、再度エンタープライズにおけるID管理基盤のあり方についての解説や、IDaaS やトラストフレームワークの話の解説をしていきたいと思います。

ということで今年もよろしくお願いいたします。


[NSF2014]エンタープライズ・ID連携トラストフレームワークに おけるポリシーのあり方

$
0
0
来週は Japan Identity & Cloud Summit(JICS)ですが、今月はまだまだイベントが続きます。

1月29日(水)は神田のベルサーレで日本ネットワークセキュリティ協会(JNSA)恒例のネットワーク・セキュリティ・フォーラム(NSF)が開催され、アイデンティティ管理ワーキンググループでも一つパネルセッションがあり、私もパネリストとして参加します。

 ネットワーク・セキュリティ・フォーラム2014
 http://www.jnsa.org/seminar/nsf/2014/


テーマは昨年~今年ワーキンググループで議論の中心となっている、「エンタープライズにおけるトラストフレームワーク」です。
クラウド活用の拡がりによって企業内でもID連携が普及してきましたが、例えばグループ企業間やサプライチェーンの中でのアプリケーションや情報共有のために認証連携を行う場合に、認証やそのバックエンドにあるID管理は各IdPであるグループ企業側に任せてしまうことになります。(グループ企業の認証システムで認証された結果を持って親会社のアプリケーションへログインする、というようなユースケース)
その場合、親会社などアプリケーションを公開する側(RP側)としては本当にその認証結果(IdP側)を信じていいのか?という点が課題になります。
例えば、
・本当にちゃんとID管理されているのだろうか?(退職者アカウントが残っていたりしないか?など)
・認証システムのセキュリティが甘くてなりすましなどは起きていないだろうか?
など心配は尽きない、ということです。

セッションではそのような状況の中で企業ではどのようなポリシーを持ってID連携の信頼関係を構築したらよいのか?という点について議論をします(予定)。

是非お申し込みください。

以下、セッション概要です。(申し込みページから引用)
エンタープライズ・ID連携トラストフレームワークに
おけるポリシーのあり方
モデレータ:
アイデンティティ管理WGリーダー
宮川 晃一 氏(日本ビジネスシステムズ株式会社)
パネリスト:
南 芳明 氏(株式会社シマンテック)
富士榮 尚寛 氏(伊藤忠テクノソリューションズ株式会社)
中島 浩光 氏(株式会社マインド・トゥー・アクション)
江川 淳一 氏(エクスジェン・ネットワークス株式会社) 
近年、学術認証フェデレーション(GakuNin)に代表されるIDフェデレーションモデルが本格的に運用され始めており、経済産業省においても「ID連携トラストフレームワーク検討委員会」が設立され、今後エンタープライズ分野への大きな広がりが期待されております。
また、OpenIDファウンデーション・ジャパンとの共同WGである、エンタープライズ・アイデンティティ・ワーキンググループ(略称:EIWG)では、ID連携フェデレーションをエンタープライズ分野にて推進するため、OpenID ConnectとSCIMの普及を目的とした活動を行っています。
本アイデンティティ管理WGでは、2012年度より「ID管理におけるトラストフレームワークのエンタープライズにおける活用」について継続討議していますが、企業間のトラストフレームワークを考える上で非常に重要な「ポリシー」について、その考え方をパネルディスカッションいたします。


Japan Identity & Cloud Summit 2014のまとめのまとめ

$
0
0
先日のポストでも紹介したとおり、Vittorio Bertocci氏と一緒にJapan Identity & Cloud Summit 2014(JICS2014)に参加してきてました。

私もエンタープライズトラックを担当し、「ID基盤構築101(ワンオーワン)」というタイトルでID基盤構築の基礎の話をさせていただきました。


また、VittorioにIdentity as a Service(IDaaS)とWindows Azure Active Directoryについてインタビューもしましたので、そのうちWeb記事として公開されると思います(まだ原稿書いてませんがw)

そんなこんなで当日は他のトラックやセッションをほぼ全く聞けていないのですが、各種メディアで取り上げられたり、皆さんがtogetterでまとめを作っていただいていたので、さらにそれらをまとめておきます。

◆メディア系
Cloud Watch:災害時対策や高齢者支援で重要度を増す「ID連携」実現の方向性〜谷脇氏講演
 http://cloud.watch.impress.co.jp/docs/news/20140116_630987.html
Internet Watch:”総透明社会”にどう関わるか〜佐々木俊尚氏講演
 http://internet.watch.impress.co.jp/docs/news/20140116_630986.html
@IT:なぜ僕らはまだパスワードリスト攻撃に悩まされ続けるのか
 http://www.atmarkit.co.jp/ait/articles/1401/16/news068.html
ITPro:ID戦略で「領域を超えて情報流通や連携を」JICS2014に延べ1200人が参加
 http://itpro.nikkeibp.co.jp/article/NEWS/20140117/530462/

◆togetterまとめ
テクノロジートラック:Identity女神誕生 by @nov
 http://togetter.com/li/616328
エンタープライズトラック by @mad_p
 http://togetter.com/li/616813
なんとなくメモ by @ulto
 http://togetter.com/li/616907
パーソナルデータトラック by @nov
 http://togetter.com/li/616390
セキュリティトラック by @nov
 http://togetter.com/li/616331

◆個人blog
JICS2014に参加してきました。 by @ntsuji
 http://n.pentest.jp/?p=31142


軽くピックアップしただけなので、抜け漏れがあるかもしれませんが、見つけたら追加してきます。

おまけ
1日目夜の情報交換会でのミニセッションの写真 by @tkudos
左→右:Vittorio Bertocci(Microsoft Corporation)、私、Pat Patterson(Salesforce.com)、崎村さん(OpenID Foundation、NRI)、池澤あやかさん(女優。http://ameblo.jp/ikezawa-ayaka/



[FIM2010]無印FIM2010用HotFix

$
0
0
まだ無印のFIM2010(Forefront Identity Manager 2010)を使っている人向けのHotFixがでてきています。

ビルド番号は4.0.3733.2です。
KBページ:http://support.microsoft.com/?id=2926490

これは以前リリースされたビルド4.0.3714.2を置き換えるものなので、まだ無印を使っている人はあてた方が良いと思います。

修正されたのはSynchronization Serviceで以下が治っています。

マルチバリュー属性の差分インポートを行う際に以下の条件に該当すると変更を検出しない

  • 差分インポートが該当属性に関するエクスポートを確認した場合
  • 変更がエクスポート後、確認用の差分インポートを実行する前に、接続されたリソース側に対して直接実行された場合


タイミングの問題ではありますが、あり得る状況なので予期せぬ問題に発生しないためにも適用は必須ですね。

[WAAD]セルフサービス・グループ管理と承認フロー

$
0
0
日々いろいろと機能がリリースされている(※)Windows Azure Active Directory(WAAD)ですが、今回は利用者自身によるグループ管理と承認フロー(いずれもPremium版のプレビュー機能)を試してみます。
※ちなみに本日も新しいレポート機能がリリースされてました。

■概要

アプリケーションパネル(http://myapps.microsoft.com)からグループの作成、グループへの参加申請、承認が出来るようになっています。

■利用シーン

同じくプレビュー機能でグループを組織が使うアプリケーション(GoogleAppsなどのSaaSアプリケーション)に割り当てることが出来るようになっているので、利用者自身がグループへ参加申請し、グループオーナーが承認することで管理者でなくてもアプリケーションを使わせることが出来るようになります。

こんな感じです。



■動作を試してみる

◇初期状態の確認

 一般ユーザにはSaaSアプリケーションが割り当てられていないのでまだアプリケーションは使えない状態です。アプリケーションパネルを開いても何も出てきません。



◇事前作業:グループの作成(グループオーナー/一般利用者の作業)

 アプリケーションパネルからグループを作成します。
 ※ちなみに管理者(マイクロソフトアカウント)が管理ポータルから作成したグループだと参加申請がうまく行かないので、組織のアカウントを使ってグループを作成しておく必要があります。ここでは組織アカウント(管理権限のない一般利用者)でアプリケーションパネルへログインして、セルフサービスでグループを作成しています。

まずはアプリケーションパネルへアクセスし、グループメニューを開きます。(WAAD Premiumプレビューの有効化を事前にしておく必要があります)


[Create a Group]をクリックするとグループ作成画面になるので、グループ名を入れてグループを作成します。

[Create]をクリックするとグループが作成できます。


◇事前作業:アプリケーションへグループを割り当てる(管理者作業)

 管理ポータルでグループ一覧を開くと先ほど作成したグループが表示されているのがわかります。


 このグループをSaaSアプリケーションに割り当てます。


 これで準備は完了です。


①グループへの参加申請

 先ほどのグループオーナーとは別のユーザでアプリケーションパネルへアクセスし、グループメニューを開きます。今度はグループへの参加を申請します。
 少しわかりにくいのですが参加したいグループのアイコンの右下の歯車をクリックすると[Join]というメニューが出てくるのでクリックします。


 リクエストが成功するとグループオーナーへ承認依頼が行きます。


②グループ参加申請を承認する

 グループオーナー(先ほど事前作業でグループを作成したユーザ)でアプリケーションパネルへアクセスし、今度は承認メニューを開きます。
 すると、先ほどの申請が届いているので選択⇒承認を行います。


 これでグループへの参加が承認されるので先ほど申請したユーザはグループに割り当てられたSaaSアプリケーションが使えるようになっているはずです。


③アプリケーションを利用する

 改めてアプリケーションパネルを開きます。すると先ほどは何も出てこなかったアプリケーションメニューにグループに割り当てられたアプリケーションが表示されます。


 また、グループメニューから先ほど申請したグループのメンバになっていることもわかります。
 (ドロップダウンからMy Membershipを選択すると自身がメンバになっているグループが表示されます)



■まとめと今後の展開


 まだまだプレビュー機能ということもあり若干機能不足な感じはしますが、小規模な企業であればWAADのグループ機能を使ってうまくSaaSアプリケーション利用の承認フローが実装できると思います。

 もう少しちゃんと使おうと思うと、最低限以下の機能は必要だと思うので、今後に期待したいところです。

  • すべてのグループが表示されてしまうので、ユーザの権限によってグループの表示や申請自体が出来ないようにフィルタイングする
  • グループオーナー権限の委譲(複数人で承認出来るようにする)
  • グループオーナーが削除されてしまうとグループへの参加が出来なくなる




[JICS]Vittorio Bertocci氏へのインタビュー/オフショット

$
0
0
Japan Identity and Cloud Summit(JICS)で来日していたVittorio Bertocci氏にWindows Azure Active Directory(WAAD)のインタビュー記事が先週頭にBuild Insiderで公開されました。

Vittorio Bertocci氏インタビュー
 開発者にとってのWindows Azure Active Directoryの役割と今後の展開
 http://www.buildinsider.net/enterprise/interviewvittorio/01


内容は記事をご覧いただくとして、編集の方に許可を頂いたのでインタビュー中の写真を少々アップしておきます。

JICSの講師控室でインタビューしていました。占有してしまって済みませんでした。
しかし事前に質問を用意していたとはいえ、全編英語でのインタビューは結構疲れました。ちなみにその週はずっと彼をアテンドしていたので、若干英語力が上がったかも。


インタビューの前にGraph APIを使ってWAADで使うSaaSアプリケーションの管理もできるようになるといいなぁ、という話をホワイトボードを使ってディスカッションしていたりしました。(見えないと思いますが)


だいぶ間は空いてしまいましたが、とり合えず1週間お疲れ様でした。


おまけ(@東京から京都へ移動する前に東京駅で寿司をw)





祝!OpenID Connect ローンチ

$
0
0
遅ればせながら。OpenID Connectが2/27にローンチされました。

米OpenID Foundationを牽引してこられた崎村さんの6年に及ぶ努力が実を結んだ瞬間だったと思います。本当におめでとうございます。
 OpenID Connect リリース~インターネットのアイデンティティ層
 http://www.sakimura.org/2014/02/2277/

 OpenID Foundationが、パーソナルデータ流通時代を支えるアイデンティティAPI標準仕様「OpenID Connect」を発表
 http://www.openid.or.jp/news/2014/02/openid-connect-standard.html

このblogでもお伝えしてきたようにMicrosoftもWindows Azure Active DirectoryでOpenID Connect / OAuth をサポートしていますし、先日のVittorio Bertocci氏へのインタビューでも触れたOWIN(Open Web Interface for .NET)でもそれらの技術を利用できる様になっています。
 [WAAD] OpenID Connect Interop 5
 http://idmlab.eidentity.jp/2013/11/waad-openid-connect-interop-5.html

 [WAAD] OAuth2.0 への対応状況まとめ&ちょこっと OpenID Connect
 http://idmlab.eidentity.jp/2013/07/waad-oauth20-openid-connect.html

 開発者にとってのWindows Azure Active Directoryの役割と今後の展開
 http://www.buildinsider.net/enterprise/interviewvittorio/01

 OWIN(Open Web Interface for .NET)
 http://owin.org/


また、OpenIDファウンデーションジャパンの公式リリースでも触れられているように翻訳/教育ワーキンググループでOpenID Connectの仕様(実装ガイド)を翻訳しています。
- Basic Client
 http://openid-foundation-japan.github.io/openid-connect-basic-1_0.ja.html
- Implicit Client
 http://openid-foundation-japan.github.io/openid-connect-implicit-1_0.ja.html

私もImplicit側で少しだけお手伝いをさせていただきましたので、仕様を見てみたい、という方はぜひご覧ください。

ちなみに。
インターネットに関するプロトコルとか技術って全部アメリカからの輸入品だと思っていませんか?
少なくともIdentityに関しては日本は先進国であり、グローバルスタンダードを牽引している存在だと堂々と言えるんじゃないかな、と思えたのが今回の発表でした。
(少なくとも関わっている人たちは既に国境にとらわれていない方ばっかりですがw)


[FIM2010]PowerShellコネクタの正式リリース

$
0
0
Forefront Identity Manager 2010 R2 (FIM2010 R2)用のコネクタが更新されています。

◆PowerShell コネクタの正式リリース
 これまで PowerShell コネクタと言えばデンマークの FIM MVP の Soren Granfeldtさんが公開していたものでしたが、マイクロソフトからも正式にリリースされました。どうやらこれまで MCS(Microsoft Consulting Service)が使っていたものを製品に組み込んだ、ということらしいです(うろ覚え)

 用途としては、ホームディレクトリをファイルサーバに作ったり、Office365 へのプロビジョニング後にライセンスをアサインしたり、と小回りを聞かせたいときに使うのがメインになりそうです。

 こちらからダウンロードできます。

◆Generic SQL コネクタの RC 版(リリース候補版)
 ODBC ドライバがある DBMS へ接続できるコネクタです。これまではビルトインの SQL コネクタと Oracle コネクタしか用意されていませんでしたが、これでもう少し柔軟なシステム管理ができるようになると思います。

 こちらは RC 版なので Connect サイト(要登録)からダウンロードできます。

◆SAP ユーザ、ロール、グループ コネクタの RC 版(リリース候補版)
 こちらも RC 版です。これまでも SAP コネクタはありましたが、今後廃止される Web Service コネクタをベースに作られているものでした。今回のリリースは Web Service コネクタベースでは無いネイティブ版ということです。

 同じく Connect サイトからのダウンロードです。

◆Generic LDAP コネクタの更新
 以前正式リリースされた Generic LDAP コネクタの更新プログラムがリリースされています。
 LDAPS 接続での不具合修正や Apache Directory Server の新規サポートなどがポイントです。

 こちらは KB として公開されています。

なかなか時間が取れなくて Windows Azure Active Directory コネクタや SharePoint コネクタなど新規のコネクタの使い方を紹介できていませんが、順次公開していこうと思います。



[AAD+FIM2010]Azure Active Directory Premiumの正式リリースとプロビジョニング界のエコシステムの崩壊?

$
0
0
Windows Azure Active Directory(WAAD)あらためMicrosoft Azure Active Directory(MAAD?最近はAADで通じるっぽい)のPremiumが4月に正式リリース(GA)を迎える、ということがActive Directory Teamのblogでアナウンスされました。

Cloud based Identity and Access Management for every user on every device
 http://blogs.technet.com/b/ad/archive/2014/03/25/identity-and-access-management-for-every-user-in-every-organization-using-any-service-on-any-device.aspx


来週からのBuild(4/2-4/4)で発表されるんですかね。

blogの内容を見ると、AAD PremiumにはForefront Identity Manager(FIM)のサーバライセンスとCALが含まれるそうなので、マルチフォレストシナリオでのディレクトリ同期やオンプレミスのActive Directory以外をデータソースとしたID管理などの複雑な構成がとれるようになります。



これはエンタープライズID管理(特にプロビジョニング)市場にとって非常に大きなインパクトを持つ可能性があると考えています。エンタープライズシナリオでOffice365とか使おうと思ったら今後はAAD Premium+FIMっていうのがコスト的にも非常に優位なソリューションになる可能性がありますので、これまでAAD/Office365のディレクトリ同期ツールで足りない部分はサードパーティを、というエコシステムが成り立ってきましたが、今後すこしバランスが崩れる可能性があるのでは?と思います。


最後に、改めてですが今回正式リリースとなるAAD Premiumの機能は以下の通りです。
他にもPreview中の機能が複数あり、今後も強化されていくようです。

全体的な特徴

  • 99.9%のSLA
  • ディレクトリ内のオブジェクト数に制限なし

機能
  • アプリケーションアクセス管理
    • Google AppsやsalesforceなどへのSSO/プロビジョニングを提供、アプリケーションポータル(アクセスパネル)からアプリケーションの利用
  • セルフサービス・パスワードリセット
    • ユーザ自身によるパスワードリセット
  • セルフサービス・グループ管理
    • ユーザ自身によるグループの作成やグループへの参加登録
  • 多要素認証
    • 追加のソフトウェアやハードウェアなしでの多要素認証の提供
  • ブランドのカスタマイズ
    • ログイン画面やアクセスパネルなどの画面カスタマイズ
  • レポーティング、警告と分析
    • アクセス元ネットワークの解析や利用状況のレポート


[雑談]認証連携、ID連携そしてOAuth認証

$
0
0
アイデンティティ界隈って馴染みのない用語ばっかりが飛び交っている、というのもこの世界への参入障壁を高めている要因になっているんじゃないかな、と思っている今日この頃です。

と、言うことで崎村さんの「非技術者のためのOAuth認証(?)とOpenIDの違い入門」に絡めて考えてみました。
 参考:http://www.sakimura.org/2011/05/1087/


認証連携とかID連携っていうのは元々、Identity Federationの日本語訳だと思うのですが、まずはIdentityという用語を「認証」と訳してしまっている段階でアレな訳です。しかしかと言って明快に「これだ!」という和訳がないので仕方なく「ID連携」としてしまっているのが現状ですね。

実際の仕組みの意味的にいうと、RP(Relying Party)側の持っているアイデンティティ情報とIdP(Identity Provider)側の持っているアイデンティティ情報を「紐づける」というのがFederationの元々の意味合いなんですが、ここで混同されるのがSAMLで言えばいわゆるSAMLログオン(SAMLトークンを持っていることで認証する)という話や最近の類似した事例で言えばJWT(JSON Web Token)を使った簡易SSOっていうのがあったりして、ややこしくなるわけです。

そして、ここから拡大解釈されたのがOAuth認証(Access Tokenを持っていることで認証する)。。何だろうなぁ、、思っています

まとめるとこんな感じ。


ID連携簡易SSOえ?
SAML、OpenID Connectを使ったアイデンティティ情報(認証状態を含む)の紐づけSAML認証、JWTを使った簡易SSOOAuth認証
何をもって認証するかそもそも認証にクローズした話じゃないデジタル署名などで検証可能なトークン(SAMLトークンやJWT)を持っている(確かに持ち主に発行されたことを検証できない)トークンを持っている
用途RPとIdPのアイデンティティ情報の紐づけシングルサインオンシングルサインオン



この表を見ると簡易SSOって何よ?という話になると思いますが、シングルサインオンに求められる要件を考えると一目瞭然な訳ですが、代表的な例で言えばSLO(シングルログアウト)やセッション管理が出来ない、というところになると思います。
例えば、ちゃんとしたWAM(Web Access Management)ソリューションだとサーバ側でのセッションの強制終了や一つのサイト(RP)からログアウトすれば、すべての関連するRPからログアウトされるシングルログアウト何かが必須要件になると思いますが、SAML認証やJWTを使った簡易SSOでは単純にトークンを持っていること(もちろんトークンの発行先の検証や有効期限の検証はRP側でする前提)はあるものの、都度IdP側に該当トークンの有効性の確認までしない、というあたりがいわゆるシングルサインオンとの違いになってきます。

OAuth認証に至っては誰に発行したものなのか、についての検証すらしない(できない)というあたりが認証としての要件を満たしていないわけです。

現実世界のメタファに当てはめると、以下のような話になると思います。
・SAML認証、JWTでの簡易SSO:免許証など写真付き身分証明書を持ってきた
 ⇒RP側(アプリ側)で持ってきた人の顔と証明書の顔写真が一致しているか検証可能
・OAuth認証:保険証を持ってきた
 ⇒RP側では持ってきた人が主張すれば信じるしかない?


認証の話ばかりしましたが、連携の話をすると、RP側で持っているもしくは他のIdPから取得したアイデンティティ情報とFederation(連携:紐づけ)をして一つのアイデンティティとして認識をする、というのが本来のアイデンティティ連携です。この紐づけをする対象の属性の一つとして一番わかりやすいユースケースとして認証状態(どこで、いつ、どうやって認証された、という情報)があるのでFederationがシングルサインオンに使えるため、Federation=シングルサインオンみたいな話になっているわけです。

そんなこんなで、良くこの界隈では話がされる内容ですが、
・ID=Identityであって本質的には認証とは関係ない
・Federationも本質的には認証のための仕組みではない
・OAuthは認証には使っちゃダメ
ということです。

<酔っぱらい@新幹線にて>

[AAD/Office365]エンタープライズ環境で使う上での課題への対応が続々と

$
0
0
これまでOffice365をエンタープライズで展開する際に課題になっていたのは大きくは以下の点だと思います。

①ドメイン名の問題
 AD FSを使ってFederationをする際、Office365で使うドメイン名とオンプレミスのActive Directoryが使っているドメイン名を合わせる必要がありました。そのため、.localドメインなど内部専用ドメインを使っている企業ではUPN(User Principal Name)を変更する、など結構大きな対応をする必要がありました。

②社内ドメインのフォレスト・ドメイン構成の問題
 現状のディレクトリ同期ツールではマルチフォレスト環境での同期はできませんでした。これまでは同期専用のドメインを新しく作って対応したり、と同じくこちらも大手術が必要になる場合がありました。


ここ最近の対応でそれらの問題に対して少しずつ解が提供されてきています。
まず①のドメイン名の問題です。


①Windows Server 2012 R2 update 1でのAlternative Login IDのサポート

 UPNを変更する代わりに別のログインIDを使ってAD FSへログインできるようになっています。
 詳しくはこちら
  http://support.microsoft.com/kb/2927690/ja


次にフォレスト構成の問題です。

②Azure Active Directory Premium+Forefront Identity ManagerもしくはAAD Syncの利用

 先日のポストでも書いたように、Azure Active Directory Premiumが先日の//Build 2014で発表され、Premiumの特典となっているFIM(Forefront Identity Manager)を使ってインテグレーションを行えばかなり柔軟に対応できます。
 加えてディレクトリ同期ツールの後継となるAAD Sync(Azure Active Directory Sync)のCTP版が公開されています。
 技術ドキュメントを含めこちらのサイトで公開されています。(ダウンロードするにはconnectサイトへの登録が必要)
  http://www.aadsync.com/

 今回公開されたAAD Syncを使えばFIMをゼロから構築しなくても、あらかじめ設定された状態でマルチフォレスト環境であってもディレクトリ同期が出来るようになります。


他にもHybrid Identity Managementというキーワードで続々と情報が出てきそうなので継続的にウォッチが必要そうです。
 Hybrid Identity Management
  http://www.microsoft.com/en-us/server-cloud/solutions/identity-management.aspx#fbid=qWbiPt7PEDF

[FIM2010]vNextが見えてきた。FIMからMIM(Microsoft Identity Manager) へ

$
0
0
昨年12月に次世代ロードマップが見えてきた、という話が出ていましたが遂に具体的な情報が見えてきました。

(また?)名前が変わります。今度は
「Microsoft Identity Manager」
です。Windows AzureがMicrosoft Azureへ変わったように、MicrosoftもWindowsだけじゃないよ、とういメッセージなんだろうな、と思います。

Server&Cloud Blogでの発表
 Forefront Identity Manager vNext roadmap (now Microsoft Identity Manager)


(関連ポスト)12月のポスト
 Important Changes to the Forefront Product Line
 [FIM2010]いよいよ次世代へのロードマップが見えてきた



詳細は来月のTechEd North Americaで発表されるようですが、今後の製品としてのフォーカスは以下の3点に向けられるようです。

  • Hybrid scenarios that leverage cloud-based services delivered in Microsoft Azure, including Multi-Factor Authentication, Azure Active Directory application integration, analytics and reporting
  • Support for the latest platforms and mobile devices with modern user interfaces
  • Improved security with additional controls, analytics and auditing of administrative and privileged user identities and their access to Active Directory, Windows Server and applications


ここでもやはりMicrosoft Azure Active Directoryと絡めたオンプレミスとクラウドのハイブリッド・シナリオが強く意識されていますね。
詳細情報が楽しみです。

[AAD/Office365]AAD Dync(次世代ディレクトリ同期)でクラウドのパスワードをオンプレミスへ

$
0
0
Office365を使う場合のシナリオは大きくは以下に分類されます。

パターン認証ID管理
クラウドのアイデンティティを使うAzure ADAzure AD
オンプレミス連携①Windows Server ADなどディレクトリ同期など
オンプレミス連携②Azure ADディレクトリ同期など

3番目のパターンにおいても最近のディレクトリ同期ツールではオンプレミスのActive Directory上のパスワード(のハッシュ)をAzure ADへ同期することが出来るようになっており、シングルサインオンではないもののユーザは同じパスワードでOffice365/Azure ADを使うことが出来るようになっていました。(SSO - Same Sign Onなんて言ったりします)

先日紹介した次期ディレクトリ同期ツールであるAAD Syncを使うと今度はクラウド(Azure AD)上のパスワードをオンプレミスのActive Directoryへ同期することが出来るようになります。

メリットは、Windows Server Active Directoryが標準では持っていないセルフサービス・パスワード・リセットがAzure ADでは使えるので、パスワードを忘れた人はAzure ADでパスワードをリセットすればオンプレミスのパスワードもリセットされる、という点でしょうか。

Technetに続々と情報が上がってきているので継続的にウォッチが必要そうです。
 http://social.technet.microsoft.com/wiki/contents/articles/tags/AADSync/default.aspx

[AAD/ASP.NET] OpenID Connectを使ってAADでログオンする

$
0
0
先日の#idcon vol.18でAzure Active Directory(AAD)のOpenID Connect対応について話をしました。
遅ればせながらフォローアップをしていきたいと思います。

当日の資料はこちらです。



概要としては、OpenID Connectに対応(Preview)したAADに対して、こちらもPreview公開されたOWINのOpenID Connectセキュリティ・ミドルウェアを使ってASP.NETのMVC5のWebアプリケーションで接続(ログイン)してみる、ということをやってみます。
また、その過程でAADのOpenID Connect対応の特異点となっているresponse_modeパラメータの動きについても解説していきます。

少々長くなりそうなので、

  • 今回)素直にOWIN/OpenID ConnectでAADを使ってログオンする方法
  • 次回)一般的なOpenID Connect OPが対応しているresponse_mode="fragment"の場合に必要な工夫

という2回でお伝えしていきます。
また、その後になると思いますが、AAD以外のOpenID Connect OPへOWIN/OpenID Connectを使って接続する例についても解説していければと思います。


■設定方法と基本的な動作
一旦、基本的な設定と動作について確認していきます。中身のプロトコルの解説を細かくする前にまずは動きをつかんでもらうことが目的です。

◇Webアプリケーションの作成(ASP.NET MVC5)
・Visual Studioを起動し、ASP.NET/MVC5のWebアプリケーションを新規に作成します。

・NuGetを使いMicrosoft.Owin.Security.OpenIdConnectをインストールします。
 現状プレビュー版のパッケージなのでリリース前のパッケージを含めて、「openidconnect」で検索すると出てきます。


・SSLを有効にします。
 これはAADに設定するアプリケーションにはHTTPSが必須なため必要な設定です。
 ソリューションエクスプローラでプロジェクトのプロパティを開き、[SSL有効]をTrueに設定します。結果、自動的にSSLのURLが生成されます。


 次に、メニューより[プロジェクト]を選び[プロパティ]を開き、WebメニューからプロジェクトのURLを先ほど割り当てられたSSLのURLを設定し、保存します。



◇AADにアプリケーションの登録
・AADの管理画面へアクセスしアプリケーションの新規作成を行います。
 以下の設定を行います。
 ・実行する作業:組織で開発中のアプリケーションを追加


 ・アプリケーション情報  名前:任意
  種類:WEBアプリケーションやWEB API


 ・アプリケーションのプロパティ  サインオンURL:先ほどVisual Studioで作成したアプリケーションのURL(HTTPS)
  アプリケーションID/URI:任意(テナント内で一意)


 作成が完了したら構成メニューより割り当てられたクライアントIDをコピーしておきます。



◇Webアプリケーションの実装
・コードを書きます。
 ソリューションエクスプローラから、App_Start\Startup.Auth.csを開き、以下を追記します。
 usingディレクティブ
using Microsoft.Owin.Security.OpenIdConnect;

 Startupクラス

app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions()
{
Client_Id = "AADに登録したアプリケーションのクライアントID",
Authority = "https://login.windows.net/テナント名.onmicrosoft.com",
Description = new Microsoft.Owin.Security.AuthenticationDescription()
{
Caption = "Azure Active Directory",
AuthenticationType = OpenIdConnectAuthenticationDefaults.AuthenticationType
}
});



 以上で準備は完了です。

◇Webアプリケーションの実行
・F5を押してアプリケーションを実行するとASP.NET MVC5のアプリケーションが起動しますので、右上のログインをクリックします。


・ログイン画面に遷移するので、右側に表示される[OpenIdConnect]をクリックします。


・AADのログイン画面に遷移するので組織のアカウントでログインします。


・ASP.NETアプリケーションにアカウントが存在しないので関連付けを行います。


 ちなみにこのアカウントはAspNetUsersテーブルに格納されますので、サーバエクスプローラから確認・編集ができます。

・ログインが完了し、ユーザ名が表示されます。



以上がとりあえず動くところまで、の手順です。
少ないコード量で実現できることがわかります。



■内部での通信シーケンスの解説
では、内部の動作について確認してみます。
細かく解説すると非常に面倒なフローなので、ざっくり解説すると以下の様になっています。

  1. AADの認可エンドポイントがws-federationのRPになっている
  2. 認証に関してはws-federationのSTSになっているhttps://login.microsoftonline.comで行われる(Federationされている)
  3. 認証が完了するとcodeとid_tokenが払い出される
  4. codeとid_tokenはUserAgent(ブラウザ)を経由し、HTTP POSTでclient(Webアプリケーション)へ渡される


この4番目のcodeやid_tokenのクライアントへの渡し方がOpenID Connectのresponse_modeというパラメータで決まってくるのですが、この流れを見るとAAD/OWINではform_postというタイプを使っていることがわかります。この部分がAADの特徴的な部分となっているので後ほど解説します。

以下が通信シーケンスの全体像です。




■response_modeとは
OpenID Connectの仕様を見ると本パラメータは以下の様に定義されています。

OPTIONAL. Authorization Endpoint からパラメータを返すために Authorization Server が使用する方法を通知する. 要求されるレスポンスモードがレスポンスタイプで指定されるデフォルトモードである場合, このパラメータの使用は推奨されない (NOT RECOMMENDED).
参考)http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html


OpenID Connectにおいて、id_tokenをクライアント(Webアプリケーション)へ渡す方法は、Authorization Codeフローではcodeと引き換えにresponse bodyで、Implicitフローではフラグメント(URLの後の#以下)でというのが標準的?です。
しかし、先の通信シーケンスをみるとわかるようにAAD/OWINではid_tokenをJavaScriptで自動的にクライアントへPOSTするようなフォームを含むHTMLをUserAgentへ返すことで、id_tokenをクライアントへ渡しています。この方法(response_mode)をform_postと呼びます。
現状、AADにおけるresponse_modeはこのデフォルトのform_postおよびfragment(Implicitで使われる)およびquery(GETパラメータで渡す)の3つがサポートされます。
一般的にサーバサイドでパラメータの横取りをすることが出来ないfragmentを使ってtokenを渡すのが基本なのですがOAuthにおけるaccess_tokenのようにBearer Token(トークンを持っている人なら認可する)ではなくHok Token(トークンを持っている人が本当に持ち主なのかを確認してから認可する)であるOpenID Connectのid_tokenならそこまで気を遣わなくても大丈夫、という考え方なのかも知れません。
また、これは#idconでも話したように推測でしかないのですが、これまでASP.NETがサポートしてきたws-federationやSAML-Pなどのプロトコルと同じ動きをさせることでミドルウェアの実装を簡素化する、というのが真相なのかも知れません。(ws-federationやSAML-PではSAMLトークンをUserAgentを経由してRPへPOSTして渡すのが最近の主流なので)


ただ、現在のOWINの実装では他のOpenID Connect OP(現状あまりresponse_mode自体をサポートしているOPが少なく、かつform_postをサポートしているところはほぼない)との相互接続に問題が起きやすいので、response_mode="fragment"で構成されたOPをASP.NET/OWINで使う場合にどうすれば良いのか、について次回解説したいと思います。


[AAD/ASP.NET] (続)OpenID Connectを使ってAADでログオンする~response_mode=fragment編

$
0
0
先日のポストの続きです。

前回はOWIN Security MiddlewareのOpenID Connectを使ってAzure Active Directory(AAD)でのログオンを行いました。
今回も基本的にやることは同じなのですが、OWINのOpenID Connectのresponse_modeの初期値がform_postなので、一般的なOpenID ConnectをサポートしたIdentity Providerへの流用の可能性を考えるために、Implicitフローで使われるfragmentを使ってid_tokenを受け渡す場合の工夫について試してみます。
※尚、現状AADではImplicitフローをサポートしているという表明があるわけではないので、今回紹介するのはあくまでImplicitもどきです。


■処理の流れとAADの場合
まず、OpenID ConnectにおけるImplicit Clientではどのような流れでid_tokenが発行されるのか?、AADではどうなるのか?についてみておきたいと思います。
 参考)OpenID Connect Implicit Client Implementer's Guide 1.0 - draft 15の日本語訳
    http://openid-foundation-japan.github.io/openid-connect-implicit-1_0.ja.html

大まかな流れは、以下のようになっています。

①Client は必要なリクエストパラメータを含んだ Authentication Request を構築する.
②Client は Authorization Server にリクエストを送信する.
③Authorization Server は End-User を認証する.
④Authorization Server は End-User の Consent/Authorization を取得する.
⑤Authorization Server は End-User を ID Token, およびもし要求されていれば Access Token とともに, Client に戻す.
⑥Client はそれらのトークンを検証し, End-User の Subject Identifier を取得する.


具体的には以下のような通信が行われます。

①~②クライアントからのAuthorizationリクエスト

https://server.example.com/authorize?
response_type=id_token%20token
&client_id=s6BhdRkqt3
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&scope=openid%20profile
&state=af0ifjsldkj
&nonce=n-0S6_WzA2Mj


response_typeにid_tokenおよびtokenを付けて要求を投げる必要がある(REQUIRED)、というのが仕様です。
しかし、現状でAADはresponse_typeにtokenをサポートしていないので、id_tokenだけを要求することにします。また、前述の通り、AADではresponse_modeの初期値がform_postなので、Implicit(もどき)の場合はresponse_mode=fragmentをつける必要があります。

結果、以下のようなリクエストになります。

https://login.windows.net/{tenantid}/oauth2/authorize?
response_type=id_token
&response_mode=fragment
&client_id=xxxxx
&redirect_uri=https%3a%2f%2flocalhost%3a44307%2fAccount%2fFragment%2f
&scope=openid+profile
&state=yyyyy
&nonce=zzzzz



③~④End-Userの認証、同意取得
この部分は仕様のスコープ外なので手段は問いません。
AADではws-federationを使ってhttps://login.microsoftonline.comへ認証要求を投げ、ユーザ認証を行います。

https://login.microsoftonline.com/login.srf?
wa=wsignin1.0
&wtrealm=https%3a%2f%2flogin.windows.net%2f
&wreply=https%3a%2f%2flogin.windows.net%2f{tenantid}%2fwsfederation
&wctx=xxxx
&wp=MBI_FED_SSL
&id=


認証が成功するとhttps://login.windows.net/{tenantid}/wsfederationに対してSAMLトークンがPOSTされ、認証結果およびユーザ情報が渡されます。


⑤id_tokenをクライアントへ返す
HTTP302でredirect_uriへ戻します。その際、フラグメント(#)にid_tokenなど要求されたトークンを付加します。

HTTP/1.1 302 Found
Location: https://client.example.org/cb#
access_token=SlAV32hkKG
&token_type=bearer
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&expires_in=3600
&state=af0ifjsldkj


AADの場合は、先ほどのリクエストでtokenを要求できませんでしたので、id_tokenのみが返ってきます。

HTTP/1.1 302 Found
Location: https://localhost:44307/Account/Fragment/#
id_token=eyJ0....
&state=yyyyy
&session_state=zzzzz



⑥返ってきたid_tokenを検証する
id_tokenがフラグメントで返ってきますので、UserAgent(ブラウザ等)上でパラメータを解析してクライアントへ送ってあげる必要があります。通常はJavaScriptでlocation.hashを解析してクライアントへid_tokenなどをPOSTしてあげます。
今回もredirect_uriに指定したページ(https://localhost:44307/Account/Fragment/)へのGETリクエストすると以下のようなJavaScriptを含むHTMLを返すようにしています。(テストなのでベタ書きしています)

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<form method="post" name="autopost" action="https://localhost:44307/">
<script type="text/javascript">
var params = location.hash.substring(1).split('&');
var id_token = params[0].substring(9);
var state = params[1].substring(6);
var session_state = params[2].substring(14);

document.write("<input type=hidden name=id_token value=");
document.write(id_token);
document.write(" />");
document.write("<input type=hidden name=state value=");
document.write(state);
document.write(" />");
document.write("<input type=hidden name=session_state value=");
document.write(session_state);
document.write(" />");
</script>
<input type="submit" value="Submit" />
</form>
<script language="javascript">window.setTimeout('document.forms[0].submit()', 0);</script>
</body>
</html>




結果、フラグメントでわたってきたid_tokenがOWINのOpenID Connect Middlewareが動いているASP.NETアプリケーション(https://localhost:44307)へPOSTされ、自動的にトークン検証~ユーザ情報の取り出しを行ってくれます。


ここまでのフローをざっとシーケンスにしたものが以下の図です。



■ASP.NET/OWINでの実装
デフォルトのASP.NET/OWIN Middlewareではフラグメントでわたってきたid_tokenをUserAgent側で解析してPOSTする部分が用意されていないので、その部分だけは作ってあげる必要があります。
具体的にはViewを一つ用意して、そのエンドポイントに対するGETがあった場合に先のJavaScriptを含むHTMLを返すようにします。

以下の手順で実装しました。

ソリューション・エクスプローラからAccount Controllerへ新規MVC5 Viewを追加します。先のシーケンスの中にも出てきたように、今回はエンドポイントの名前を「Fragment」としています。



新規作成されたfragment.chtmlに先のJavaScriptを含むHTMLを記載します。



次に、Account Controllerにアクションを定義します。AccountController.csに以下のコードを追記します。

[AllowAnonymous]
public ActionResult Fragment()
{
return View();
}



また、OWINの認証設定部分(Startup.Auth.cs)に以下の設定を入れます。
・response_type:id_token
・response_mode:fragmentを指定
・redirect_uri:先に追加したView(Fragment)のエンドポイントを指定


app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions()
{
Client_Id = "xxxxx",
Authority = "https://login.windows.net/{tenant}.onmicrosoft.com",
Response_Type = "id_token",
Response_Mode = "fragment",
Redirect_Uri = "https://localhost:44307/Account/Fragment/",
Description = new Microsoft.Owin.Security.AuthenticationDescription()
{
Caption = "Azure Active Directory",
AuthenticationType = OpenIdConnectAuthenticationDefaults.AuthenticationType
}
});



これで実行すると前回と同じような動きに見えますが、裏側ではImplicit(もどき)でid_tokenが受け渡されます。

Viewing all 771 articles
Browse latest View live