2011年12月11日日曜日

[AD FS2.0]属性ストアへのアクセス権限について


前回に引き続き AD FS2.0 の属性ストアに関するネタです。

AD FS2.0 の属性ストアとして設定可能なのは、
・SQL Server
・LDAP
・カスタム
があることは前回紹介しましたが、各属性ストアへのアクセス権限については注意が必要です。

そもそも AD FS2.0 のサービスから各属性ストアへのアクセスはどのようなセキュリティ・コンテキスト(ユーザ)で実行されるのか?について理解しておくことが必要ですので、どんなユーザでアクセスが発生しているのかをカスタム属性ストアのコードの中にデバッグコードを書いて見てみました。
少々ベタですが、Initialize メソッドの先頭に以下の様に System.Environment.UserName (ユーザ名)、SystemEnvironment.UserDomainName (ドメイン名)をファイルへ出力するようにコードを書いてみます。

public void Initialize(Dictionary<string, string> config)
{
   System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\temp\adfs.txt",false,System.Text.Encoding.GetEncoding("shift_jis"));
   sw.Write("ユーザ名 : " + System.Environment.UserName);
   sw.WriteLine();
   sw.Write("ドメイン名 : " + System.Environment.UserDomainName);
   sw.Close();

結果、ファイルには以下の様な文字列が書き込まれました。

ユーザ名 : IDP$
ドメイン名 : ADFS20
※コンピュータ名が IDP 、ドメイン名が ADFS20.LOCAL の環境下。

これは、AD FS2.0 のサービスを起動しているユーザ(シングル構成だとデフォルトで Network Service)を指しています。証拠にサービスの構成でサービス実行ユーザを Administrator に変更すると、以下の様に書き込まれる値が変わります。

ユーザ名 : Administrator
ドメイン名 : ADFS20


さて、これは
各属性ストアへ AD FS2.0 起動ユーザへのアクセス権限を与える必要がある
ということを意味します。(AD FS2.0 で認証されたユーザの権限ではないところがポイント)

MSDN の属性ストアに関連する記述を見るとデフォルトで設定できる、SQL Server および LDAP について以下の様な記述があります。(ポイントのみかいつまんでいます)
URL : http://technet.microsoft.com/en-us/library/adfs2-help-attribute-stores(WS.10).aspx

■SQL Server
1. SQL Server 属性ストアを設定するときは「Server=CONTOSOSRV01;Database=UserAttributes;Integrated Security = True」という様な接続文字列を AD FS2.0 の属性ストアに設定する必要がある。

2. マイクロソフトとしては、SQL Server へのアクセスは Windows 統合認証を使うことを推奨する。もし SQL Server 認証を使う場合はユーザ名およびパスワードに関する情報が AD FS2.0 の構成データベースの中にクリアテキストで保持されることになる。


解説すると、接続文字列の中の「Integrated Security = True」の部分は SQL Server へのアクセスを Windows 統合認証で行うことを指しています。
もちろん、「Server=CONTOSOSRV01;Database=UserAttributes;User Id=MyUser; password= P@ssw0rd」という形で接続文字列を設定することも可能ですが、属性ストアのパラメータとしてそのまま AD FS2.0 に設定されてしまうので、パスワード部分が丸見えになってしまうので推奨しない、ということです。

ただ、Windows 統合認証を使う場合は上記で述べたように AD FS2.0 を実行しているユーザで SQL Server へアクセスしてしまうので、あらかじめ SQL Server 側で当該ユーザへのログオン許可および必要なロールの割り当てを行っておく必要があります。

■LDAP
1. LDAP 属性ストアを設定するときは RFC 2255 に記載されているような LDAP URL をパラメータに指定する必要がある。
(例:ldap://localhost:56000/cn=AdfsUsers,o=Microsoft,c=US)

2. LDAP 属性ストアへのアクセスは Windows 統合認証を使用する必要がある。


ポイントは SQL Server の場合と異なり、LDAP へのアクセスにはバインドユーザとパスワードを指定することが出来ないので、 Windows 統合認証をサポートする LDAP サーバ(実質 AD LDS くらいしかない?)を用意しておく必要がある、というところです。



上記を踏まえてカスタム属性ストアを作成する場合は以下の考慮が必要です。

・Windows 統合認証でアクセスできる場合は、属性ストア側に AD FS2.0 実行ユーザへの権限を与えておく必要がある
・独自の認証を使う場合は、AD FS2.0 側のパラメータとして設定を行うことは可能だがクリアテキストで保持されてしまうので注意が必要である


MSDN フォーラムなどを見ていると LDAP を使いたいけど Windows 統合認証が必須、というあたりに引っかかっている人が結構いそうなので、OpenLDAP 対応のカスタム属性ストアなどを作って公開したらヒーローになれるかも、、です。

0 件のコメント: