統合Windows認証を用いると、ASP.NETでほぼ何もしなくてもサイトにセキュリティをかけることができます。
また、Windowsのログイン情報も取得することができます。
ですので、LAN内のポータルサイトでログイン画面を作らずしてログインユーザのActiveDirectory内で管理してりう情報を引き出すことが可能です。
(InternetExplorer限定ですが)
-- code -----------
System.DirectoryServices.DirectoryEntry directoryEntry = new System.DirectoryServices.DirectoryEntry("ldap://activedirectoryserver ", domainUser, password);
System.DirectoryServices.DirectorySearcher search = new System.DirectoryServices.DirectorySearcher(directoryEntry);
System.Security.Principal.IIdentity identity = (System.Security.Principal.IIdentity)User.Identity;
search.Filter = string.Format("(sAMAccountName={0})", identity.Name);
System.DirectoryServices.SearchResult result = search.FindOne();
System.DirectoryServices.DirectoryEntry resultEntry = result.GetDirectoryEntry();
string UserName = resultEntry .Properties["cn"].Value.ToString();
------------------
コードを断片的に記載しましたが、こんな感じでUserNameにはActiveDirectory上で登録されている氏名が抽出できます。
順を追って説明しますと、まずエントリを作成します。
(部署内だけを検索したい場合は
ldap://activedirectoryserver/cn =部署xxxxxxxxxx
みたいな入力をします。)
この際にActiveDirectoryに検索が可能なユーザとパスワードを指定します。
例:test.localにログインする際に[develop]、[p@ssword]を入力してログインする場合
domainUser = test.local\develop
password = p@ssword
その後、検索を実行するオブジェクトに検索先のエントリをセットします。
ログイン名自体はエントリ名ではないので、ログイン名を持つエントリを探しすようにフィルタを設定します。
統合Windows認証の場合ASP.NETではHttpApplicationクラス内のUserプロパティ内に認証情報が格納されています。そこからログイン名を取得します。
検索を実行し、帰ってきたエントリのProperites内のcnを変数に格納してます。
いかがでしょうか、ログインIDやパスワードの入力を求めなくてもActiveDirectory内の氏名が表示されたかと思います。