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

[WAAD] OAuth2.0 への対応状況まとめ&ちょこっと OpenID Connect も

$
0
0
まず初めにお断りしておきますが、公式リソースでは Windows Azure Active Directory の OAuth2.0 への対応自体はアナウンスされていますが、内容について明確には言及がない状態なので、あくまで今日時点で色々と探索した結果を書いており、間違いや今後の変更などは高い確率で発生すると思われます。あくまで、エンドポイントを探して叩いてみたらこんな結果が返ってきた、という状態であるとご理解ください。


さて、始めます。

WAAD でアプリケーションを追加すると様々なエンドポイントが付与されます。


その中には OAuth2.0 のトークン・エンドポイントも含まれており、OAuth2.0 プロトコルで使う client_id や client_secret の取得、redirect_uri 等の設定もアプリケーションの構成の中で行うことが出来ます。


さらに、現状ではプレビュー提供ですが protected resource として同じく WAAD 上に構成したアプリケーションを登録することも可能であり、OAuth2.0 を使って WAAD 上のアプリケーション(API)をマッシュアップしていくことも可能になっています。



基本的には WAAD Authentication Library(AAL)を使ってアクセストークンなどを取得することが前提のようですが、折角そこに OAuth のエンドポイントがあるので叩いてみたいと思います。

まず、叩き方ですが、先日日本語訳がされた OAuth2.0 の仕様(RFC6749)に定義されている各種フローをそれぞれ試してみます。

 The OAuth 2.0 Authorization Framework(OpenID Foundation Japan 翻訳 WG 訳)
 - http://openid-foundation-japan.github.io/rfc6749.ja.html


試したのは、
・認可コードグラント
・インプリシットグラント
・リソースオーナーパスワードクレデンシャル
・クライアントクレデンシャル
です。

それぞれやってみます。


◆認可コードグラント

仕様上は、ざっくりいうと
1.クライアントが認可エンドポイントから認可コードを取得
2.トークンエンドポイントで認可コードとアクセストークンを交換
という流れになります。

ここで疑問。先ほど出てきた WAAD の OAuth2.0 エンドポイントにはトークンエンドポイントはありましたが、認可エンドポイントが出てきていませんでした。

トークンエンドポイントのアドレスが
 https://login.windows.net/<テナントID>/oauth2/token?api-version=1.0
だったので、token ⇒ authorize に変えたら行けるかな?ということで
 https://login.windows.net/<テナントID>/oauth2/authorize?api-version=1.0
を試してみます。意外と行けるもんです(笑)


ということで以下を試します。
1.認可コードの取得

 エンドポイント:認可エンドポイント
 メソッド:GET
 パラメータ:
  ・response_type : code
  ・client_id : <WAADで取得した client_id>

 こんなクエリになります。

 GET /<テナントID>/oauth2/authorize?api-version=1.0&response_type=code&client_id=<client_id> HTTP/1.1
 Host: login.windows.net

 仕様上は HTTP 302 が返ってきて Location に redirect_uri?code=xxx という形で認可コードが返ってくるはずです。

 結果、Microsoft Online アカウントでの認証が実行された後、ちゃんと認可コードが返ってきました。







2.認可コードとアクセストークンの交換

 次は取得した認可コードをトークンエンドポイントへ投げてアクセストークンを取得します。

 エンドポイント:トークンエンドポイント
 メソッド:POST
 パラメータ:
  ・grant_type : authorization_code
  ・code : <取得した認可コード>
  ・resource : アクセス対象の保護リソースの URI(WAAD 上で指定した WebAPI のURI)。今回は Graph API の URI(https://graph.windows.net)を指定します。

 ※OAuth2.0 の仕様上は resource パラメータは存在しませんが、WAAD の OAuth2.0 エンドポイントへアクセスする場合は必ず resource パラメータを要求されます。

 POST /<テナントID>/oauth2/token HTTP/1.1 Host: login.windows.net
 Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=<取得した認可コード>&resource=https%3A%2F%2Fgraph.windows.net

 結果、残念ながら、「unsupported_grant_type」が返ってきてしまいました。
 エラーの説明として「ACS70003: The access grant 'authorization_code' is not supported」とあるので、現状は認可コードグラントは使えない、ということです。




◆インプリシットグラント

次はインプリシットグラントです。こちらは非常に単純なフローで、認可エンドポイントに対してアクセストークンを直接要求します。

 エンドポイント:認可エンドポイント
 メソッド:GET
 パラメータ:
  ・response_type : token
  ・client_id : <WAADで取得した client_id>

 こんなクエリになります。

 GET /<テナントID>/oauth2/authorize?api-version=1.0&response_type=token&client_id=<client_id> HTTP/1.1
 Host: login.windows.net

 仕様上は HTTP 302 が返ってきて Location に redirect_uri#access_token=xxx&token_type=xxx という形でフラグメントにアクセストークンが返ってくるはずです。

 しかし、これも残念。「unsupported_response_type」といわれてしまいます。こちらも使えない、といことです。



◆リソースオーナーパスワードクレデンシャル

続いてリソースオーナーパスワードクレデンシャルです。こちらも単純でリソースオーナーのユーザ名とパスワードをクエリに埋め込んでアクセストークンを要求します。

 エンドポイント:トークンエンドポイント
 メソッド:POST
 パラメータ:
  ・grant_type : password
  ・username : <WAADのユーザ名>
  ・password : <WAADのパスワード>
  ・resource : https://graph.windows.net

 こんなクエリになります。

 POST /<テナントID>/oauth2/token HTTP/1.1 Host: login.windows.net
 Content-Type: application/x-www-form-urlencoded grant_type=password&username=<WAADのユーザ名>&password=<WAADのパスワード>&resource=https%3A%2F%2Fgraph.windows.net

 こちらもうまくいけば HTTP 200 でアクセストークンが返ってくるはずです。

 しかし、同じくこちらも残念ながら「unsupported_grant_type」です。なかなかうまく行かないもんです。



◆クライアントクレデンシャルグラント

最後はクライアントクレデンシャルグラントです。こちらはトークンエンドポイントへ直接トークンを要求します。

 エンドポイント:トークンエンドポイント
 メソッド:POST
 パラメータ:
  ・grant_type : client_credentials
  ・client_id : <取得した client_id>
  ・client_secret : <取得した client_secret>
  ・resource : https://graph.windows.net

 ※こちらも仕様上は grant_type 以外のパラメータは必須ではありませんが、認証を行うことが必要なフローなので、WAAD では client_id と client_secret を投げてクライアント認証を行っているようです。

 こんなクエリになります。

 POST /<テナントID>/oauth2/token HTTP/1.1 Host: login.windows.net
 Content-Type: application/x-www-form-urlencoded grant_type=client_credentials&client_id=<取得した client_id>&client_secret=<取得した client_secret>&resource=https%3A%2F%2Fgraph.windows.net

 うまくいけば HTTP 200 でアクセストークンが返ってくるはずです。

 こちらは、、、、、うまく行きました。

{
 "token_type":"Bearer",
 "access_token":"eyJ0eX........(略)",
 "expires_in":"43199",
 "not_before":"1374294762",
 "expires_on":"1374337962",
 "resource":"https://graph.windows.net"
}



と、いうことで結果をまとめると下記の通りとなります。
まぁ、まだまだですねぇ。

フロー結果備考
認可コードグラント×Code requetは成功
Token requestでunsupported_grant_type
インプリシットグラント×unsupported_response_type
リソースオーナーパスワードクレデンシャル×unsupported_grant_type
クライアントクレデンシャルグラント以下のパラメータが要求される
Resource
Client_id
Client_secret







◆おまけ(OpenID Connect)

ここからはおまけですが、WAAD も OpenID Connect に対応するという話があります。OpenID Connect は OAuth2.0 ベースなので少し試してみました。
試したのはインプリシットのみで、結果的に言うと id_token の取得が出来てしまいました。が、仕様への対応状況はまだかなり怪しい感じです。

 エンドポイント:認可エンドポイント
 メソッド:GET
 パラメータ:
  ・response_type : id_token token
  ・client_id : <WAADで取得した client_id>
  ・scope : openid profile
  ・nonce : <任意の文字列>

 こんなクエリになります。

 GET /<テナントID>/oauth2/authorize?api-version=1.0&response_type=id_token%20token&client_id=<client_id>&scope=openid%20profile&nonce=<任意の文字列> HTTP/1.1
 Host: login.windows.net

 仕様上は HTTP 302 が返ってきて Location に redirect_uri#id_token=xxx&access_token=xxx&token_type=xxx という形でフラグメントに ID トークンとアクセストークンが返ってくるはずです。

 しかし、先に述べたように response_type に token を指定するとエラーになるので、今回は response_type = id_token のみを指定してみました。

 すると、フラグメントではなく、パラメータで id_token が返ってきました。

 返ってきた id_token を BASE64 URL デコードしてみると、
{
 "typ":"JWT",
 "alg":"RS256",
 "x5t":"NGTFvdK-fythEuLwjpwAJOM9n-A"
}

{
 "aud":"<取得した client_id>",
 "iss":"https://sts.windows.net/<テナント ID>/",
 "nbf":1374284435,
 "exp":1374313235,
 "ver":"1.0",
 "tid":"<テナントID>",
 "oid":"<WAAD 上のユーザのオブジェクトID>",
 "upn":"xxx@<テナントドメイン>.onmicrosoft.com",
 "sub":"vqrPXdoNdGPRd5DBnH...(略)",
 "family_name":"富士榮",
 "given_name":"尚寛",
 "nonce":"hoge"
}

 という形になりました。
 sub に入っている値が何なのか、Graph API 等で探ってみたのですが、利用者に見えるところには出てこない識別子のようです。

まだ、これで何か出来るわけではありませんが、Office Web App の開発リファレンスを見ているとトークンのデコードや検証のためのサンプルコードが出ていたりするので、同じ仕組みを使うことが出来るようです。

今回、色々と課題はあるものの WAAD が着々と OAuth2.0 や OpenID Connect に対応してきていることが見えてきました。
今後は社内の Active Directory と AD FS ⇒ WAAD を経由して OpenID Connect RP への認証連携なども実現できるようになってきそうなので、ますますコンシューマ系のサービスとの接続が容易になってくるのかも知れません。

引き続き目が離せないところです。


[FIM2010/WAAD] Azure Active Directory コネクタ Pre-Release 版が Connect に登場

$
0
0
ようやく出てきました。

先日来、ちょこちょこアップデートについて投稿していた Office365 / Windows Azure Active Directory へ Forefront Identity Manager 2010(FIM)から直接接続するためのコネクタの Pre Release 版が Connect で公開されました。(ちなみに ECMA2.0 ベースのようです)


ダウンロードは以下 URL より(Connect への登録が必要です)

Windows Azure Active Directory Connector
 https://connect.microsoft.com/site433/Downloads/DownloadDetails.aspx?DownloadID=50509


尚、今後も基本的にはディレクトリ同期ツールを使うことが推奨されるようですが、特殊なルールの適用をしたい場合や規模が大きい場合、フォレスト・ドメイン構成が複雑な場合などはこちらを使うことになりそうです。


関連ポスト
[Office365]新ディレクトリ同期ツールはFIM2010R2ベース
 http://idmlab.eidentity.jp/2013/06/office365fim2010r2.html
[FIM2010]ついにディレクトリ同期ツールにビルド番号が追いつきました
 http://idmlab.eidentity.jp/2013/06/fim2010.html

ID&IT Management Conference 2013に参加します

$
0
0
現在国内で開催されるエンタープライズ向けのアイデンティティ管理関連のイベントといえば、
・ID&IT Management Conference
・Japan Identity & Cloud Summit
の2つが主だと思います。
(コンシューマとか技術よりだと通称 idcon の Identity Conference とか OpenID Technight などもあります)

そのうち、ID&IT Management Conference 2013 が 9/18@大阪、9/20@東京で開催されます。

 公式ページ
http://nosurrender.jp/idit2013/


昨年はカンターラ・イニシアティブの顔でシングルサインオンに関する技術動向についてのパネルディスカッションのモデレータをさせていただいたのですが、今年は日本ネットワークセキュリティ協会(JNSA)の顔で「THE 日本のID管理(SI編)~要求仕様策定のポイント~」と題してアイデンティティ管理システム/認証システムの導入に関する RFP をどうやって書くべきなのか?のポイントについてのパネルディスカッションのモデレータを担当することになりました。

公式サイトのプログラム紹介ページより
THE 日本のID管理(SI編)~要求仕様策定のポイント~
日本のIAM分野のSIerが、認証基盤システム導入のための要求仕様(RFP)策定のポイントについてパネルディスカッションを行います。


内容についてはまだ考えている途中ですが、JNSAのアイデンティティ管理ワーキンググループで今年度のテーマの一つとして検討をしている、「アイデンティティ管理や認証システムの導入の目的と必要とする機能のマッピング」をベースに話をする予定です。
要するに、一言でアイデンティティ管理とか認証基盤と言っても何のためにシステム化をするのかによって必要となる機能は違うはずなので、単純に製品機能の有無(例えば対応する接続先アダプタの数など)で検討を進めてもあまり意味は無く、例えば運用コストを下げる目的ならばパスワードのセルフリセット機能などの自動化機能の重みが増しますよね、などといった話をしていこうと思います。
まだ、パネリストは未定ですが、導入経験の豊富な SIer のみなさんが登場してくれるはずなので、現場の生の声が聞けるチャンスだと思います。

平日の日中帯ですが、東阪の両方の会場でやりますので、都合がよろしければご来場ください。

JWx 仕様の日本語翻訳版が公開されました

$
0
0
以前より OpenID Authentication や OAuth 2.0 などの仕様の日本語化を行ってきた OpenID Foundation Japan の翻訳・教育ワーキング・グループにより JWx の翻訳版が公開されました。



本当は昨日(9/4)の OpenID Technightでの発表の現場へ駆けつけたかったんですが、残念ながら大雨で足止めをされてしまい、間に合わず。。。


今回公開されたのは、以下の3点です。




Windows Azure Active Directory の API や Google Apps の API、Salesforce.com の API を Forefront Identity Manager(FIM)をはじめとする IdM 製品から実行するようなケースではこれまで各接続先に対する設定に管理者の ID とパスワードを埋め込んだりする必要がありましたが、JWT を使った OAuth 2.0 の認可を行う形へ各社の API が対応してきているので、今後はそのようなリスクのある運用はしなくても良くなると思われます。今のうちに JWx に慣れ親しんでおく良い機会になると思いますので、ぜひ参考にしてください。
(私は JWT の部分で協力させていただいています)


参考)これまでに翻訳された仕様一覧はこちらから。
 http://openid-foundation-japan.github.io/



Bearer Token とは?

$
0
0
先日の OpenID Technightの後の懇親会で OpenID Foundation 理事長の崎村さんと飲みながら話をしていて、「言われてみれば・・・」と思ったのが、「OAuth などの Bearer Token の Bearer ってなんのことだと思う?」という話題でした。

OAuth 2.0 では通常 Bearer もしくは MAC というタイプのトークンが使われ、単純に違いは Secret や署名の要否という理解だったので、Bearer が何を意味するのか?を考えたことはなかったんですが、言われてみると気になります。

辞書を引くと
・運ぶ人[もの],運搬人
・持参人
などという意味があるようです。
weblioより

相変わらずこの手の用語は直訳しても良くわからないです。。。

ということで、崎村さんによる解説です。

・Bearer は「持参人払い」から来ている
 ※大辞林によると「持参人払い=小切手などの証書で,特定の者を権利者として指定せず,それを持参した人に支払うこと」
・つまり、トークンを持ってきた人に対して支払う(API 利用を許可する)、という意味である
・例えば、飛行機のチケットは持ってきた人が権利者かどうかの確認を行うが、演劇のチケットは持ってきた人が観劇できる。この演劇のチケットが Bearer である

なるほど。わかりやすい。

OAuth などのトークンに置き換えると、Bearer トークンを使う場合、使用されるトークンが誰に対して発行されたのかを確認せずに、「トークンを持っていること」をベースに API 利用を許可する、ということですね。


RFC などの仕様や実装における用法を勉強するのはもちろん大事ですが、使われる用語の意味にはちゃんと設計思想が反映されているので、ちゃんと理解しておきたいところです。

[FIM2010]gacutil.exeを使わずにカスタムワークフローをGACへ取り込む方法

$
0
0
Forefront Identity Manager(FIM 2010)のカスタマイズのポイントを大きく分けると以下の4つになります。


  1. カスタムクライアント
  2. カスタムワークフロー
  3. ユーザインターフェイス(UI)
  4. 管理エージェント



これまでこのブログで紹介したことがあるのは3番目のUIのカスタマイズと、4番目の管理エージェントの作成方法でした。

ユーザインターフェイス(UI)
 [FIM2010] ポータルのナビゲーションバーをカスタマイズする
 http://idmlab.eidentity.jp/2012/05/fim2010.html

管理エージェント
 [FIM2010]Google Apps MA 1.1.0 をリリースしました
 http://idmlab.eidentity.jp/2012/10/fim2010google-apps-ma-110.html


1のカスタムクライアントはWindows PhoneやiOSなどで承認フローを回すような製品などが世の中にはリリースされていたりしますし、カスタムワークフローについても実際の導入を行う際は確実に実装をする対象になってくると思います。

と、いうことで今後カスタムワークフローの紹介も本ブログでしていこうと思っています。今回はその中で環境面の話なので順番的には微妙なのですが、ちょうどFIM MVPのCraigさんとSorenさんが作成したカスタムワークフロー(dll)をグローバルアセンブリキャッシュ(GAC)へ取り込む方法について紹介していたので、その方法を紹介します。

通常、作成したdllをGACに取り込むには.NET Framework SDKをインストールして、その中に含まれているgacutil.exeを使うことになるのですが、あんまり環境を汚したくない人向けにgacutilを使わなくても取り込むためのスクリプト(PowerShell)を先の二人が公開してくれています。

Craig Martin氏のブログ - Identity Trench
 Use PowerShell to GAC a FIM Workflow DLL without gacutil.exe
 http://www.identitytrench.com/2013/09/use-powershell-to-gac-fim-workflow-dll.html?utm_source=dlvr.it&utm_medium=facebook

Soren Granfeldt氏のブログ - The Identity Management Explorer
 Use Powershell to put your assemblies in the GAC
 http://blog.goverco.com/2012/04/use-powershell-to-put-your-assemblies.html?m=1


参考にしてみてください。

ID&IT Management Conference 2013 が終わりました

$
0
0
9/18@大阪、9/20@東京で開催された「ID&IT Management Conference 2013」が、無事終了しました。
 公式サイト
  http://nosurrender.jp/idit2013/

先日投稿した通り、私は JNSAの IdM-WG のメンバでのパネルディスカッションを担当しました。

時間が限られてたのでなかなか多くは伝えられませんでしたが、とりあえず無事に終了して良かったかな、、と思っています。
当日使った資料を公開しましたので、よろしければご覧ください。






後、一番のジェネラルセッションの資料もExgen江川社長が公開していらっしゃいましたので、紹介しておきます。 今後エンタープライズがどういう方向に進んでいくのか?についてわかりやすく解説されているので、ぜひご覧ください。




最後に、OpenID Foundation Japanのエヴァンジェリスト @novが togetter で当日のまとめを作っているので参加できなかった方はこちらを見ると雰囲気がつかめると思います。

 ID & IT 2013 - Osaka #idit2013
  http://togetter.com/li/565725

[FIM2010]Hotfix(ビルド 4.1.3469.0)が出ています

$
0
0
久しぶりに新しい Hotfix が出ています。

Forefront Identity Manager 2010 R2 向け Hotfix build 4.1.3469.0
 http://support.microsoft.com/default.aspx?id=2877254


ECMA2.0 関係の修正や Windows Azure Active Directory コネクタ関係の修正も含まれているので、是非適用しておきたいところです。


尚、これは今回に限った話ではありませんが、Hotfix を適用すると各種 dll のビルド番号が更新され、本体の exe からうまく認識されなくなることがあります。
そんな時は、MIIServer.exe.config などの .config ファイルの中の セクションの bindingRedirect 要素に古い dll のビルド番号と新しい dll のビルド番号を書いておくことで回避をすることができます。
※FIM Synchronization の場合。FIM Service の場合は同じく対応する Microsoft.ResourceManagement.Service.exe.config ファイルを記載する必要があります。





[IDaaS]Salesforce Identityがリリース

$
0
0
2012年秋の Dreamforce で発表された Salesforce Identity ですが、ようやく正式にリリースされたようです。(対象は Enterprise Edition / Performance Edition / Unlimited Edition とのこと)


※画面ショットは公式サイトより

発表時の blog はこちら
 原文
  http://blogs.developerforce.com/engineering/2012/09/introducing-salesforce-identity.html
 日本語
  http://blogjp.sforce.com/2012/09/salesforce-iden-ce09.html

 参考)日本の公式ページ
  http://www.salesforce.com/jp/platform/identity/



まだ現物を触れていないので何とも言えませんが、各種オンライン記事を見ると Active Directory 統合やら多要素認証や Google や SAP など各種アプリケーションへのシングルサインオン基盤(ランチャー)のような機能や SCIM を使ったプロビジョニング機能などがあるようです。


  • A cloud directory with user profiles, workflows and administration.
  • Directory integration and support for Active Directory.
  • Dashboards and reporting.
  • Multi-factor authentication.
  • Single sign-on, integration with Salesforce Chatter and social feeds, mobile identity and social sign-ons via Facebook, Google, Amazon and Paypal.
  • Policies based on device such as mobile or PC.

※出展:zdnet / http://www.zdnet.com/salesforce-launches-identity-service-eyes-okta-7000021928/


  • Cloud Directory: Scalable directory services, including fully automatable user profile management, workflows and delegated administration to improve compliance
  • Directory Integration: New Salesforce Identity Connect enables out-the-box support for existing directory investments such as Active Directory
  • Reporting and Dashboards: Builds and customizes reports and dashboards instantly using drag and drop tools to better understand usage and access patterns across apps
  • Multi-factor Authentication: Adds an extra layer of security when logging in or accessing critical resources

※出展:forbes / http://www.forbes.com/sites/benkepes/2013/10/15/salesforce-launches-identity-tying-together-the-complexity-of-the-distributed-enterprise/


中にはこんな記事も。

Salesforce Identity rocks the boat for startups like Okta and Ping
 http://www.citeworld.com/cloud/22557/salesforce-identity-versus-okta-ping-onelogin

確かにこれまで Okta とか PingIdentity などのサードパーティに頼っていたフェデレーション関係の機能が本体に取り込まれるとなると波風も立つかと。。。

しかし現状の Windows Azure Active Directory の例を見ていても他のサービスとの統合は確かに出来るようにはなるんでしょうが、「器用な」連携はまだまだ、、という気がするので、サードパーティはそのあたりの「かゆいところに手が届く」サービスや製品をリリースすることでエコシステムが機能していくことになるんだと思います。
(Ping Federate と Office365 の連携なんかはよい例で、AD FS を使わずに PingIdentity の製品を使うことでクレームルールだけではできない「器用な」ことができるようになっています)


尚、現状私の手元にある Salesforce のライセンスが Developer Edition と Professional Edition だけなので、何とか対象になっているエディションを入手できたら実際に試してみます。

ちなみに Developer Edition でも ID プロバイダ、認証プロバイダ、シングルサインオン設定などは可能で、いつの間にか認証プロバイダの種類に OpenID Connect が登場しているあたりが流石の Pat Patterson / Chuck Mortimore コンビというあたりです。


[FIM2010]Hotfix(ビルド 4.1.3479.0)がリリース

$
0
0
先日の 4.1.3469.0 に引き続き 4.1.3479.0 がリリースされました。

KB ページ


1週間しか間があかずに新しい Hotfix がリリースされる、というのはこれまでなかったような気がします。。。


さて、今回の修正は以下の通りです。

FIM Service

Issue 1
When you have very long XPath queries in the FIM Service, CPU usage may increase. This causes a decrease in performance.

FIM Synchronization Service

Issue 1
The Synchronization Service may leak memory when you use an ECMA2 connector.

Issue 2
When an existing ECMA2 connector is updated when a server configuration is moved between servers, the update is unsuccessful. This problem occurs when the connector requires access to encrypted parameters, such as a password, to complete the operation.

Issue 3
When an import is confirmed, a staging error may occur in rare cases. When this problem occurs, you receive the following error message:

Cannot insert duplicate key row in object 'dbo.mms_cs_link'

Issue 4
If during a full import on the Active Directory management agent there is a reference on an organizational unit (OU) to an OU two levels down, the sync engine will crash.

Issue 5
When you select the option to abandon the key set in the Synchronization Service Key Management Utility, the operation may be unsuccessful. Additionally, you receive the following error message:

Value is not in the expected range.

BHOLD suite

Issue 1
The processing of BHOLD Queue entries takes a longer time than expected to finish after an earlier hotfix is applied.

Issue 2
You cannot add a permission for a user by using the BHOLD connector if the permission was ever denied for the user.

Issue 3
The removal of permissions from a personal role (prefixed with PR-) does not trigger the removal of those permissions from the user.

ちなみに FIM Reporting を System Center Service Manager 2012 SP1 以降の環境で使っている場合は、この Hotfix を適用する前に一旦 FIM Reporting の機能を削除してから Hotfix をインストールし、再度 FIM Reporting を追加するという手順を踏む必要があるようです。




[MIIS/ILM/FIM]ついに MIIS2003 の延長サポートも終了

$
0
0
今でこそ Forefront ブランドになっている Identity Manager ですが、1999 年の Microsoft の Zoomit 買収から色々と名前を変えながら彷徨ってきています。

◆買収前史
1997年 Microsoft による LinkAge 買収。LinkAge Directory Exchange(LDE) を取り込む
1999年 Microsoft による Zoomit 買収。VIA を Microsoft Metadirectory Services(MMS)と改名

◆Microsoft Identity Integration Server(MIIS)時代
2003年 Microsoft Identity Integration Server(MIIS) 2003 発表
2005年 Microsoft による IdNexus 買収。Alacris を Certificate Lifecycle Manager(CLM)へ

◆Identity Lifecycle Manager(ILM)時代
2007年 Identity Lifecycle Manager 2007(MIIS2003SP2+CLM)発表

◆Forefront Identity Manager(FIM)時代
2010年 Forefront Identity Manager 2010(FIM2010)発表
2011年 Microsoft による BHOLD 買収。BHOLD Suite へ
2012年 Forefront Identity Manager 2010 R2発表


と、色々と変遷しているのですが、日本で初めて発売されたのが 2003年の MIIS2003 Enterprise Edition でした。
その MIIS2003 EE の延長サポートがついに 2013/10/8 で終了しました。Windows XP ももう少しで本当に終わりですが MIIS も終わりです(合掌)



公式リンク

[IDaaS]PingIdentity Cloud Desktop で便利ライフ

$
0
0
Identity Federation 専業ベンダで有名な PingIdentity の Identity as a Service (IDaaS) である PingOne が 50ユーザ、各ユーザ 5 アプリケーションまでなら無料で使えます。(For Groups エディション)

 PingOne


このサービスは、Salesforce.com や Office365 から Facebook や twitter まで、さまざまなアプリケーションに対するシングルサインオンを一元管理できるサービスです。
利用者はこのサービス上に自分の使いたいアプリケーションを登録しておくことで、それぞれのアプリケーションへ個別にログインしなくても、PingOne へさえログインすればシングルサインオンできます。

メインは SAML IdP としての機能ですが、ブラウザに Extension を入れることでフォーム認証にも対応しています。(フォームへ ID / PWD を代行入力してくれます)

尚、各種パブリッククラウドの SaaS アプリケーションへの対応はもちろん、自社内のアプリケーションについても SAML や Extension を使って設定を行うことでシングルサインオン対象とすることができます。


細かい設定の方法は後日紹介しようと思いますが、今回は軽く使ってみた操作イメージを紹介します。

まずはブラウザで Cloud Desltop を起動します。要は登録したアプリケーションを起動するためのランチャーです。

とりあえず For Groups エディションで登録できるアプリケーションは 5 つまでなので、LinkedIn / Evernote / Twitter / facebook / salesforce.com を登録しています。

salesforce.com は SAML SSO、他のアプリケーションはブラウザ Extension を使った Basic SSO アプリとして登録しています。



まず、Basic SSO 対応の LinkedIn を起動してみます。
ブラウザに Extension をインストールした状態で LinkedIn へ遷移すると、Extension が起動し、初回のみユーザ ID とパスワードの入力をフックします。



これで一旦 LinkedIn へログインすると次回以降は Cloud Desktop から LinkedIn を起動するとログイン画面でユーザ ID / パスワードと自動的に入力してくれます。




次は salesforce.com です。
こちらは SAML を使ってシングルサインオンするので、salesforce.com 側にも設定をする必要があります。細かい設定方法などは後日紹介しますが、基本的な設定のノリは以下で書いた記事と同じです。

クラウド・サービスと社内システムとのID連携 最新トレンド
 Salesforce CRM/Force.comとのアイデンティティ基盤連携を実現する

PingOne でアプリケーションを追加するとあらかじめ salesforce.com に追加すべき情報が一覧で表示されるので、手順に従って設定を行います。



手順に従い、salesforce.com と PingOne の両方を設定します。

まずは salesforce.com 側から。


続いて salesforce.com の Metadata を PingOne へ登録します。



登録が終わったら先ほどの LinkedIn と同じく Cloud Desktop から起動すると、SAML 認証連携が走ってログインできます。




ちなみに、iPad などでこれを使うともの凄く便利です。
タブレットやスマホで毎回細かいフィールドにパスワードを入力する手間から解放されるだけでもかなりの生産性アップになりますので、例えば外回り営業などのシーンで活用することができるかもしれませんし、もちろん個人ユースで facebook や twitter を使う上でもかなり便利です。

アプリケーションもたくさん対応しているようなので、後日もう少し細かく紹介しようと思います。

[WAAD]OAuth で WebAPI を保護する ①

$
0
0
Windows Azure Active Directory(WAAD)が OAuth2.0 / OpenID Connect に対応しつつある、という話は以前紹介しましたが、具体的にどうやって使うのか?についてはあまり解説記事もないので、今回簡単に紹介していこうと思います。
(一部、Preview の機能を使うので今後手順などが変更になる可能性があります)

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

◆やりたいこと
WebAPI へのアクセスを WAAD の OAuth2.0 の機能を使って保護する
⇒つまり、WAAD が発行したアクセストークンを使って WebAPI の実行の認可をしてみようと思います。

簡単に絵にすると以下のようになります。


ポイントは、ユーザが直接 WebAPI を実行するのではなく、OAuth クライアントが実行する、かつその際に OAuth クライアントに ID/PWD を設定しておかなくてもユーザの代理として機能する、というところです。


◆作業の流れ
作業の流れは以下の通りです。
  1. WebAPI の作成:今回は ASP.NET MVC4 の WebAPI を使います
  2. WebAPI の保護:WAAD を使って認可する様に設定を行います
  3. WebAPI を WAAD に登録:WAAD の保護対象リソースとして WAAD へ登録します
  4. OAuth クライアントの作成:本来は真面目にクライアントも作るのですが、今回は生の動きを見るために Chrome Extension の Advanced REST Client とダミー URL を使います
  5. OAuth クライアントを WAAD に登録:WAAD を使うアプリケーションとして OAuth クライアントを登録します
  6. WebAPI へのアクセス許可設定:OAuth クライアントが WebAPI へアクセスできるように設定します
  7. 動作確認:実際に OAuth2.0 のフローに従ってアクセスできるかどうかテストします。(今回は認可コードフローを試してみます)
ちょっと長めなので、2,3回に分割して紹介していきます。


◆実際の作業
では、始めます。

1.WebAPI の作成

Visual Studio 2012 で以下の通り WebAPI を作成します。ここで作成した WebAPI へのアクセスを Windows Azure Active Directory(WAAD)の OAuth を使って保護します。

まずは、ASP.NET MVC4 Web アプリケーションを作成します。



プロジェクトテンプレートでは WebAPI を選択します。



作成が終わったら F5 を押してデバッグモードで起動します。
ブラウザで http://localhost:[アサインされたポート番号]/Api/Values へアクセスすると Visual Studio のテンプレートに登録されている値が表示されます。


2.WebAPI の保護

作成した WebAPI を WAAD で保護するための設定を行います。具体的には Authorization ヘッダに設定されてくるアクセストークンの Validation をするために、global.asax にValidationHandler を作成、登録します。これでトークンの Validation に失敗すると HTTP 401 Unauthorized が返るようになります。

まず必要なライブラリへの参照を設定します。必要なのは、以下の3つです。
  • System.IdentityModel
  • JSON Web Token Handler for the Microsoft .NET Framework(NuGet パッケージ)
  • Microsoft Token Validation Extension for Microsoft .NET Framework 4.5(NuGet パッケージ)
System.IdentityModel

JSON Web Token Handler for the Microsoft .NET Framework

Microsoft Token Validation Extension for Microsoft .NET Framework 4.5



参照設定が終わったら、global.asax へ TokenValidationHandler を追加します。
この部分は MSDN の以下のサイトに紹介されているので、global.asax のソースコードはそのまま使います。
 Securing a Windows Store Application and REST Web Service Using Windows Azure AD (Preview)

環境によって変えるのは、以下の2点だけです。
 const string domainName = “xxx.onmicrosoft.com";
  ※契約した WAAD のテナントドメイン名
 const string audience = “http://localhost:[ポート番号]";
  ※作成した WebAPI の URI


一応ソースを張り付けておきます。

using System;
using System.Collections.Generic;
using System.IdentityModel.Metadata;
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Claims;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel.Security;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Xml;
using System.Xml.Linq;

namespace ProtectedAPI
{
// メモ: IIS6 または IIS7 のクラシック モードの詳細については、
// http://go.microsoft.com/?LinkId=9394801 を参照してください

public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);

// Add Token Validation Handler -- 20131020
GlobalConfiguration.Configuration.MessageHandlers.Add(new TokenValidationHandler());
}
}

// Token Validation Handler Class -- 20131020
internal class TokenValidationHandler : DelegatingHandler
{
// Domain name or Tenant name
const string domainName = "xxxx.onmicrosoft.com";
const string audience = "http://localhost:52941";

static DateTime _stsMetadataRetrievalTime = DateTime.MinValue;
static List<X509SecurityToken> _signingTokens = null;
static string _issuer = string.Empty;


// SendAsync is used to validate incoming requests contain a valid access token, and sets the current user identity
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
string jwtToken;
string issuer;
List<X509SecurityToken> signingTokens;

if (!TryRetrieveToken(request, out jwtToken))
{
return Task.FromResult<HttpResponseMessage>(new HttpResponseMessage(HttpStatusCode.Unauthorized));
}

try
{
// Get tenant information that's used to validate incoming jwt tokens
GetTenantInformation(string.Format("https://login.windows.net/{0}/federationmetadata/2007-06/federationmetadata.xml", domainName), out issuer, out signingTokens);
}
catch (Exception)
{
return Task.FromResult<HttpResponseMessage>(new HttpResponseMessage(HttpStatusCode.InternalServerError));
}

JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler()
{
CertificateValidator = X509CertificateValidator.None
};

TokenValidationParameters validationParameters = new TokenValidationParameters
{
AllowedAudience = audience,
ValidIssuer = issuer,
SigningTokens = signingTokens
};

try
{

// Validate token
ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(jwtToken,
validationParameters);

//set the ClaimsPrincipal on the current thread.
Thread.CurrentPrincipal = claimsPrincipal;

// set the ClaimsPrincipal on HttpContext.Current if the app is running in web hosted environment.
if (HttpContext.Current != null)
{
HttpContext.Current.User = claimsPrincipal;
}

// Verify that required permission is set in the scope claim
if (ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/scope").Value != "user_impersonation")
{
return Task.FromResult<HttpResponseMessage>(new HttpResponseMessage(HttpStatusCode.Unauthorized));
}

return base.SendAsync(request, cancellationToken);
}
catch (SecurityTokenValidationException)
{
return Task.FromResult<HttpResponseMessage>(new HttpResponseMessage(HttpStatusCode.Unauthorized));
}
catch (Exception)
{
return Task.FromResult<HttpResponseMessage>(new HttpResponseMessage(HttpStatusCode.InternalServerError));
}
}

// Reads the token from the authorization header on the incoming request
private static bool TryRetrieveToken(HttpRequestMessage request, out string token)
{
token = null;
string authzHeader;

if (!request.Headers.Contains("Authorization"))
{
return false;
}

authzHeader = request.Headers.GetValues("Authorization").First<string>();

// Verify Authorization header contains 'Bearer' scheme
token = authzHeader.StartsWith("Bearer ") ? authzHeader.Split('')[1] : null;

if (null == token)
{
return false;
}

return true;
}

/// <summary>
/// Parses the federation metadata document and gets issuer Name and Signing Certificates
/// </summary>
/// <param name="metadataAddress">URL of the Federation Metadata document</param>
/// <param name="issuer">Issuer Name</param>
/// <param name="signingTokens">Signing Certificates in the form of X509SecurityToken</param>
static void GetTenantInformation(string metadataAddress, out string issuer, out List<X509SecurityToken> signingTokens)
{
signingTokens = new List<X509SecurityToken>();

// The issuer and signingTokens are cached for 24 hours. They are updated if any of the conditions in the if condition is true.
if (DateTime.UtcNow.Subtract(_stsMetadataRetrievalTime).TotalHours > 24
|| string.IsNullOrEmpty(_issuer)
|| _signingTokens == null)
{
MetadataSerializer serializer = new MetadataSerializer()
{
CertificateValidationMode = X509CertificateValidationMode.None
};
MetadataBase metadata = serializer.ReadMetadata(XmlReader.Create(metadataAddress));

EntityDescriptor entityDescriptor = (EntityDescriptor)metadata;

// get the issuer name
if (!string.IsNullOrWhiteSpace(entityDescriptor.EntityId.Id))
{
_issuer = entityDescriptor.EntityId.Id;
}

// get the signing certs
_signingTokens = ReadSigningCertsFromMetadata(entityDescriptor);

_stsMetadataRetrievalTime = DateTime.UtcNow;
}

issuer = _issuer;
signingTokens = _signingTokens;
}

static List<X509SecurityToken> ReadSigningCertsFromMetadata(EntityDescriptor entityDescriptor)
{
List<X509SecurityToken> stsSigningTokens = new List<X509SecurityToken>();

SecurityTokenServiceDescriptor stsd = entityDescriptor.RoleDescriptors.OfType<SecurityTokenServiceDescriptor>().First();

if (stsd != null && stsd.Keys != null)
{
IEnumerable<X509RawDataKeyIdentifierClause> x509DataClauses = stsd.Keys.Where(key => key.KeyInfo != null && (key.Use == KeyType.Signing || key.Use == KeyType.Unspecified)).
Select(key => key.KeyInfo.OfType<X509RawDataKeyIdentifierClause>().First());

stsSigningTokens.AddRange(x509DataClauses.Select(clause => new X509SecurityToken(new X509Certificate2(clause.GetX509RawData()))));
}
else
{
throw new InvalidOperationException("There is no RoleDescriptor of type SecurityTokenServiceType in the metadata");
}

return stsSigningTokens;
}
}
}



この状態で再度デバッグ実行し、ブラウザからアクセスするとAuthorizationヘッダがないため、401 Unauthorizedが返ってきます。



とりあえず、今回は WebAPI を作るところまでを紹介しましたので、次回は WAAD で実際に保護するための設定を入れていきます。

[WAAD]OAuth で WebAPI を保護する ②

$
0
0
前回に引き続き Windows Azure Active Directory(WAAD)の OAuth2.0 で WebAPI を保護する方法を紹介します。

◆作業の流れ
作業の流れは以下の通りで、前回は 1 ~ 2 を紹介しましたので、今回は 3 からです。

  1. WebAPI の作成:今回は ASP.NET MVC4 の WebAPI を使います
  2. WebAPI の保護:WAAD を使って認可する様に設定を行います
  3. WebAPI を WAAD に登録:WAAD の保護対象リソースとして WAAD へ登録します
  4. OAuth クライアントの作成:本来は真面目にクライアントも作るのですが、今回は生の動きを見るために Chrome Extension の Advanced REST Client とダミー URL を使います
  5. OAuth クライアントを WAAD に登録:WAAD を使うアプリケーションとして OAuth クライアントを登録します
  6. WebAPI へのアクセス許可設定:OAuth クライアントが WebAPI へアクセスできるように設定します
  7. 動作確認:実際に OAuth2.0 のフローに従ってアクセスできるかどうかテストします。(今回は認可コードフローを試してみます)


◆実際の作業

3.WAAD への保護リソースの登録

ここまでで WebAPI へアクセスした時に渡されるアクセストークンを WAAD で確認するための WebAPI 側の設定を行いました。次は WAAD 側に保護対象リソースとして WebAPI を登録する作業です。
以下の手順で WAAD にアプリケーションを追加します。

まずは Windows Azure の管理ポータルにログインし、Active Directory から対象にしたいディレクトリの設定を開きます。すると、アプリケーションというメニューがあるので、そこから追加をしていきます。

追加するのは「組織で開発中のアプリケーション」です。

次にアプリケーションに任意の名前を付けて、種類に「WEB アプリケーションや WEB API」にします。

次にアプリケーションの URI を指定します。ここには先ほどの WebAPI の URI を指定します。(今回は Visual Studio からデバッグするときの URL(http://localhost:xxxx)を使います。


WAAD のディレクトリへのアクセス権限を設定します。
今回は特にディレクトリ上のデータへのアクセスは不要で、単に認証さえ出来ればよいので、「シングルサインオン」にチェックを入れておきます。


これで作成した WebAPI の WAAD への登録は完了です。


4.OAuth クライアントの登録~5.WebAPI を WAAD に登録

次は WebAPI にアクセスする OAuth クライアントです。

保護リソースへアクセスするための OAuth クライアント(実際はこれも Web アプリケーションやネイティブアプリケーション)についても WAAD が認識している必要があるので、WAAD 上へ登録します。
今回はアクセスの流れと WebAPI の保護を見るだけなので、実際にクライアント・アプリケーションを作らずに Chrome Extension の Advanced REST Client を使いますので、WAAD 上にはダミーの URL でアプリケーションを登録します。


先ほどの WebAPI の時と同じように登録を開始します。

URI には適当な値を入れておきます。今回は「http://localhost」としています。OAuth2.0 の認可エンドポイントから認可コードを取得するときにこの URI にフラグメントとしてコードがくっついてくるので、実際にアクセスできる URI である必要はなく、404 Not Found であろうとブラウザのアドレスバーからコードが取得できる、という寸法です。



ディレクトリアクセスについては特には必要ないので、「シングルサインオン」としておきます。


6.WebAPI へのアクセス許可設定

次は、先ほど作った WebAPI に対して OAuth クライアントがアクセスできるようにするアクセス許可設定を行います。
現状では Preview 機能ですが、アプリケーション構成の中に「クライアントアクセス」があるので、ここでクライアントとなれるアプリケーションを設定します。プルダウンに先ほど作った OAuth クライアントが出てくるので、そちらを選択して保存します。






さて、実はこれで設定は基本的には終わりです。

次回は実際にアクセスをして、動きを確認したいと思います。

[WAAD]OAuth で WebAPI を保護する ③

$
0
0
前回、前々回に引き続き Windows Azure Active Directory(WAAD)の OAuth 2.0 で WebAPI を保護する方法を紹介します。

これまでのポスト
 [WAAD]OAuth で WebAPI を保護する ①
 [WAAD]OAuth で WebAPI を保護する ②


前回までで環境は整ったので、今回は実際にアクセスしてみます。(今回でようやく終わりです)

◆作業の流れ
これまでの作業の流れは以下の通りです。今回は最後の 7 を実行します。


  1. WebAPI の作成:今回は ASP.NET MVC4 の WebAPI を使います
  2. WebAPI の保護:WAAD を使って認可する様に設定を行います
  3. WebAPI を WAAD に登録:WAAD の保護対象リソースとして WAAD へ登録します
  4. OAuth クライアントの作成:本来は真面目にクライアントも作るのですが、今回は生の動きを見るために Chrome Extension の Advanced REST Client とダミー URL を使います
  5. OAuth クライアントを WAAD に登録:WAAD を使うアプリケーションとして OAuth クライアントを登録します
  6. WebAPI へのアクセス許可設定:OAuth クライアントが WebAPI へアクセスできるように設定します
  7. 動作確認:実際に OAuth2.0 のフローに従ってアクセスできるかどうかテストします。(今回は認可コードフローを試してみます)



◆実際の作業

7.動作確認

実際に OAuth クライアントから WebAPI へアクセスします。OAuth の認可コードフローを使って WAAD からアクセスに必要なアクセストークンを取得するので、まずは OAuth クライアントの client_id と client_secret を確認します。
クライアント ID(client_id)は 管理ポータルのアプリケーションの構成の中にありますが、client_secret は初期状態では生成されていません。そこでキーの項目で有効期限を選んで生成をします。尚、作成後ページ遷移をするとそのキーは二度と参照できなくなるので、必ずコピーしておきます。万一忘れてしまった場合は再度キーを生成します。




これで実際にアクセスするための準備はすべて終了です。
もう一度おさらいですが、今回やりたいことをシーケンスに表わすと以下のような流れになります。



上記のシーケンスの通り、まずは WAAD の 認可エンドポイントへリクエストを投げます。

※今回はクライアントを作らずにブラウザと Chrome Extension の Advanced REST Client を使うので、リソースオーナー(ユーザ)がクライアントへアクセスしてきたと仮定して、クライアントがリソースオーナーへリダイレクトしてくる認可要求を手動で実行します。

投げるリクエストは以下の通りです。

・メソッド:GET
・エンドポイント:
 https://login.windows.net/common/oauth2/authorize?api-version=1.0
・パラメータ
 response_type : code
 client_id : 先に取得した Client の client_id

実際はブラウザから以下の URL へアクセスします。
 https://login.windows.net/common/oauth2/authorize?api-version=1.0&response_type=code&client_id=[client_id]


すると、WAAD の認可エンドポイントから認証要求が返ってきますので、WAAD 上に登録した組織のアカウントでログインします。(フローの①)


認証が通ると、再度認可エンドポイントへ遷移し、設定がうまくいっていれば認可コードが払い出されます。
クライアントがダミー(WAAD に登録したアドレスが適当に http://localhost)なので、ブラウザにはエラーが表示されますが、アドレスバーを見るとちゃんとコードがパラメータに入っていることがわかります。
これが上記フローの②に該当します。


これで認可コードが取得できたので、次は WAAD のトークンエンドポイントで認可コードとアクセストークンを交換してもらいます。
今度は POST メソッドを使うので Advanced REST Client を使います。

投げるリクエストは以下の通りです。

・メソッド:POST
・エンドポイント:
 https://login.windows.net/common/oauth2/token
・フォームデータ
 grant_type : authorization_code
 client_id : 先に取得した Client の client_id
 client_secret : 先に取得した Client の client_secret
 code : 取得したcode
 resource : WebAPI の URI(WAAD に登録した URI)


こんな感じで投げます。


うまくいけば HTTP 200 が返ってきて、結果にアクセストークンが返ってきます。フローの④の部分です。(ついでに id_token も返ってきてます)


ようやくこれで WebAPI へアクセスする準備が整いました。
あとは単純に、このアクセストークンを Authorization ヘッダにセットして WebAPI の URI へリクエストを投げるだけです。

投げるリクエストは以下の通りです。実際のアクセストークンの前に「Bearer 」を入れるのを忘れないでください。

・メソッド:GET
・エンドポイント:
 http://localhost:52941/Api/Values
・ヘッダ
 Authorization : Bearer [取得したアクセストークン]

こんな感じです。上記フローの⑤に当たります。


前々回で保護設定をした状態では HTTP 401 が返ってきていましたが、今回はちゃんと HTTP 200 が返ってきます。
データも取得できているようです。



いかがでしょうか?
概念的に OAuth2.0 を使ってリソースを保護する、と言うだけなら簡単なのですが、実際にステップ毎に実行してみると理解ができると思います。
また、Visual Studio 2013 からは OWIN という新しい認証の実装が入ってきていますが、内部的にはこんな感じで動いています(たぶん)。

参考)Understanding OWIN Forms authentication in MVC 5





[Office365] DirSync on DC!!

$
0
0
いつの間にか色々な機能がどんどん使えるようになってきたディレクトリ同期ツールですが、これまで何故かドメインコントローラ上へインストール出来ませんでした。

ベースとなっている Forefront Identity Manager(FIM)は普通にドメインコントローラへインストール出来るのに何故?という状態だったのですが、この度の更新(6553.0002)からドメインコントローラへのインストールがサポートされました。

これで小規模環境や検証環境でもサーバを2台用意しなくても済むようになったので、より手軽に導入が出来るようになりました。




とりあえずインストールしてみましたが、若干工夫が必要な部分もあるので注意が必要です。
(すみません、スクリーンショットとるのをミスって若干解像度荒いです)



まぁ当然このあたりは変わりようもなく、、、



と、ここまで来たら次は構成ウィザードですが、ここで構成ウィザードを始めるとダメなので、一旦インストーラを終了します。



ここで一旦ログオフ~再ログオンをします。
何をやっているかというと、FIM をインストールしたことのある人ならお分かりだと思いますが、この後の Synchronization Service への構成(管理エージェントのインポートなど)を行うには、インストール実行ユーザが FIMSYNCADMINS グループの権限を持っている必要があるため、インストーラがメンバ追加をした権限を有効化するために一旦ログオフして再ログオンする必要があるのです。

再ログイン後、デスクトップに出来ている「ディレクトリ同期の構成」を実行すると構成ウィザードが再開されるので、通常通りオンライン側の管理ユーザと企業ディレクトリの管理ユーザを入れて構成を進めると問題なくセットアップが完了します。




ベースの FIM のビルド番号はつい先日リリースされた 4.1.3479.0 でした。
もう完全に同じものになってしまっています。。。




[WAAD] OpenID Connect Interop 5

$
0
0
Windows Azure Active Directory(WAAD)の OpenID Connect サポートについては 2012 年 6 月のWindows Azure チームの blog 「Reimagining Active Directory for the Social Enterprise」以降、Mike B. Jonesさんや Vittorio Bertocciさんによって少しずつ情報が公開され、実装も進んできました。

私の先日の Postでもアクセストークンを取得する時に id_token が取得できていたりしていましたし、OAuth への対応状況の確認の際に responce_type に id_token を指定すると対応の気配が見えたりしていました。

で、遂に公の接続性テストの場に出てきました。某 OP や PingIdentity などに並んで Microsoft AAD が Participant に掲載されています。

 OC5:OpenID Connect Interop 5
 http://osis.idcommons.net/wiki/OC5:OpenID_Connect_Interop_5



尚、Mike Jones さんの公開している WAAD テナントの well-known を見ると OpenID Connect の構成情報やサポート状況がわかります。
https://login.windows.net/kauti.onmicrosoft.com/.well-known/openid-configuration

{
"issuer":"https://sts.windows.net/b4ea3de6-839e-4ad1-ae78-c78e5c0cdc06/",
"authorization_endpoint":"https://login.windows.net/b4ea3de6-839e-4ad1-ae78-c78e5c0cdc06/oauth2/authorize",
"token_endpoint":"https://login.windows.net/b4ea3de6-839e-4ad1-ae78-c78e5c0cdc06/oauth2/token",
"token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt"],
"jwks_uri":"https://login.windows.net/common/discovery/keys",
"response_types_supported":["code","id_token","code id_token"],
"subject_types_supported":["pairwise"],
"id_token_signing_alg_values_supported":["RS256"],
"microsoft_multi_refresh_token":true
}

ちなみに特別なテナントを使っているわけではなさそうなので、WAAD のテナントをお持ちの方は well-known を叩いてみると同様に情報を参照することができます。


今後も引き続き要ウォッチです。

[WAAD/Office365]Vittorio Bertocci氏来日

$
0
0
今週はシアトルの Microsoft 本社に来ています。

Windows Azure Active Directory(WAAD) や Active Directory Federation Service(AD FS)、Windows Identity Foundation(WIF) など Microsoft のアイデンティティ・テクノロジーに興味のある人には朗報です。

年明け 1/14 ~ 1/15 に開催される Japan Identity & Cloud Summit(JICS)に Windows Azure Active Directory の Principal Program Manager の Vittorio Bertocci氏が来日・登壇してくれることになりました。

 おなじみ Vittorio の Blog
 http://www.cloudidentity.com/blog/



テーマや中身の詳細は現在詰めている最中ですが、Identity as a Service(IDaaS)について Microsoft の考えていることなどを中心に話をしてもらう予定です。


すでにイベントへのレジストは開始されているので、早めにお申し込みください。

 Japan Identity & Cloud Summit 公式サイト
 https://jics.nii.ac.jp/HOME/



私も Vittorio のセッションと同日の午前中に企業が ID・アクセス管理を行うための基盤を導入しようと思った際、まず何をすべきなのか?という初めの一歩的なセッションを担当する予定なので、よろしければそちらもどうぞ。

 1/15 10:00 ~ 11:00 「ID 基盤構築 101」
「OpenIDやSAML、プロビジョニングは確かに興味深いが、そもそも自社/自組織にID基盤が存在しないんだよね」「ちょうどこれからID基盤の整備をしようと思っているんだけどどこから手をつけたらいいのやら...」といった声を多く耳にします。本セッションでは、企業にとって必要なID基盤構築のとっかかりから勘所についてご紹介していきます。

繰り返しますが、日本にいて Vittorio から直接話を聞くことができるのは非常にレアな機会ですので、是非お越しいただき、直接色々と話を聞いてみてください。

[FIM2010]小ネタ:色々な FIM

$
0
0
Forefront Identity Manager(FIM)が MS 製品の色々なところで使われている、という話はこれまでもしてきました。(SharePoint や Office365 のディレクトリ同期)

特に最近はディレクトリ同期ツールのビルド番号が完全に FIM と一致しており、ソースツリーとしては同じものになっていると推測されます。(おそらく SharePoint 2013 も Service Pack 1 が出るタイミングで合わせてくるものと思われます)

 参考)以前のポスト:[FIM2010]ついにディレクトリ同期ツールにビルド番号が追いつきました
 http://idmlab.eidentity.jp/2013/06/fim2010.html


ただ、このような状況だと本当にライセンス提供を受けている本家 FIM を使っているのか、無償ダウンロード可能なディレクトリ同期を使っているのかの区別がつかなくなってしまうため、Product ID というもので区別をしているようです。

Synchronization Service の Identity Manager(miisclient.exe)を起動し、[Help] - [About] で表示されるバージョン情報のダイアログの中の Product ID の 2 つ目のブロックが製品区分です。

- 270 : ボリュームライセンス
- 335 : MSDN
- 849 : 評価版
- 442 : ディレクトリ同期ツール

出典:現 MS Premier Support(元 FIM MVP)の Peter Green 氏の blog 「IdentityUndergroud」
http://identityunderground.wordpress.com/2013/11/20/which-fim-software-version-are-you-running/


実際に見てみました。
これがボリュームライセンス版です。


これがディレクトリ同期ツールです。


おまけですが、SharePoint 2013 です。
Product ID が空白になっています。(まだ FIM 2010 も無印です)


このように、SharePoint やディレクトリ同期ツールも FIM を組み込んで使っているので、FIM の更新情報(バグフィックス)なども見ておくと、色々とヒントがあるかも知れませんね。

[FIM2010/WAAD]新管理エージェントがまとめてリリース

$
0
0
ちょうど MVP Global Summit という年一回の世界中の MVP の集いに参加するためにシアトルのマイクロソフト本社を訪問している最中、Forefront Identity Manager 用の新しい管理エージェント(Management Agent / MA)がまとめてリリースされました。



今回リリースされたのは以下の3つです。



Generic LDAP コネクタを使うことで、これまでコミュニティベースで公開されていた ECMA 1.0 ベースの OpenLDAP XMA や、ここにきてようやく MA 名が Sun から Oracle に変更された旧 Sun の Directory Server、NetIQ(Novell)の eDirectory 用の管理エージェントを置き換えることが出来ます。

SharePoint コネクタに関しては SharePoint 標準の User Profile Service では出来ないような複雑な属性制御などが出来るようになります。

そして、やはりこれが目玉だと思いますが、Windows Azure Active Directory(WAAD)コネクタです。ディレクトリ同期ツールでは対応できなかったマルチフォレスト構成のオンプレミス AD との同期や、複数のデータソースからのアイデンティティ情報を WAAD に同期することが出来ます。


Viewing all 771 articles
Browse latest View live