くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

ldap

C#でLDAP認証

タイトル通り。MSDNにサンプル載ってるから、まーそのままなんですが。。。

//参照にも追加しないとダメ
using System.DirectoryServices;

public bool authLdap(string domain, string username, string pwd)
{
	string lserver = @"LDAP://server.domain.hoge.co.jp";//port:389
	string domainAndUsername = domain + @"\" + username;
	try
	{
	    DirectoryEntry entry = new DirectoryEntry(lserver, domainAndUsername, pwd);
	    //認証しくじるとここで例外が出る。
	    object obj = entry.NativeObject;
	    
	    DirectorySearcher search = new DirectorySearcher(entry);
	    search.Filter = "(SAMAccountName=" + username + ")";
	    SearchResult result = search.FindOne();
	    if (null == result)
	    {
	        return false;
	    }
	}
	catch (Exception ex)
	{
	    Console.WriteLine(ex.Message);
	    return false;
	}
	return true;
}

属性取りたいときはSearchResultのとこで↓の感じ。

DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(SAMAccountName=" + username + ")";
search.PropertiesToLoad.Add("sAMAccountName");//ID
search.PropertiesToLoad.Add("sn");//氏名
search.PropertiesToLoad.Add("displayName");//表示名
search.PropertiesToLoad.Add("givenName");//名前
search.PropertiesToLoad.Add("initials");//イニシャル
search.PropertiesToLoad.Add("description");//説明
search.PropertiesToLoad.Add("mail");//メール
search.PropertiesToLoad.Add("company");//会社名
search.PropertiesToLoad.Add("department");//所属
search.PropertiesToLoad.Add("memberOf");//所属の色々

SearchResult result = search.FindOne();
if (null == result)
{
    return false;
}
//例えばメールアドレスが欲しいとき
if(prm.Properties["mail"].Count > 0)
{
    result = prm.Properties["mail"][0].ToString();
}

で、なんか自分、すごい勘違いしてると思うんだけど、他の言語だと接続用(読み取り用)のアカウントと認証したいユーザって別で書いてると思うのです。なぜだか.netだと、認証したいアカウントだけでやっちゃう。多分他の言語でも接続用と認証したいアカウント同じにすれば同じことなんだろうけど、なんか釈然としない。

.netはこういうもんなのかしら。。。出来れば接続用は分けたいのですが。。。

RedmineでLDAP認証

タイトル通り。LDAP認証やる。設定は↓。Redmineの環境としてはWindowsServer2012R2上にBitnamiRedmineでRedmine構築。バージョンは3.3。

管理者でログインして、管理→LDAP認証→新しい認証方式。 sample01

そしたら↓の感じで設定。 sample02

検索範囲は「DC=domain,DC=hoge,DC=co,DC=jp」みたいにする。これはつなぎ先のLDAP次第。

で、アカウント使う場合は「user@domain.hoge.co.jp」みたいに@の後ろもつけないと上手くいかなかった。

アカウントをLDAPをもとに作る場合は属性を指定しておく。空欄にしてると、新規ユーザ来たときは入力画面に飛ばされる。

属性はココのサイトが見やすい。

問合せ