- ベストアンサー
DirectoryEntryでのLDAP認証
- Windows 2003R2サーバとWindows 7 ProのクライアントでLDAP認証アプリを作成しています。しかし、LDAP認証した際に、登録したuidにも関わらずログオン失敗となってしまいます。
- VB.netのソースコードを記載しましたが、接続文字列の指定に問題があるのか、LDAPの構成に問題があるのかが分かりません。
- LDAPサーバにuidを追加しましたが、なぜログオン失敗となるのか、LDAPへの理解が足りていないため質問させていただきました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ああ、なるほど。。。私も少し勘違いしていました。失礼しました。 #パスワードは暗号化されて AD 上に格納されているので Filter で絞ることはできないと思います。 ということで、当初質問時のソースに対して、 1.DirectoryEntry の第一パラメータには、認証したいユーザが所属するパスを指定してください。 例) "LDAP://~/ou=People,dc=maxcrc,dc=com" 2.DirectoryEntry の第二、第三パラメータには、認証したいユーザIDとパスワードをそれぞれ指定してください。 これでうまくいきませんか?
その他の回答 (1)
記載のとおり、第二パラメータが「ou=People」ではじまっているのがおかしいです。 ここは、LDAPサーバの検索が可能な権限を持った「ユーザ」を指定する必要があります。 あと Dispose できてないですね。Using つかいましょう。 http://d.hatena.ne.jp/zecl/20080226/p2
補足
回答ありがとうございます。 disposeに関しては、usingではないのですが破棄処理は 以降の処理でまとめて行っており省略してあります。 丁寧なご指摘ありがとうございます。 下記のように見直してみました。 drEntry = New DirectoryEntry("LDAP://(LDAPサーバ名):389/uid=hoge,ou=People,dc=maxcrc,dc=com", "cn=manager,dc=maxcrc,dc=com", "adminpasswd", AuthenticationTypes.FastBind) Dim drSearch As New DirectorySearcher() drSearch.ServerTimeLimit = New System.TimeSpan(0, 0, KConst.LDAP_TIMEOUT) drSearch.ClientTimeout = New System.TimeSpan(0, 0, KConst.LDAP_TIMEOUT) drSearch.SearchRoot = drEntry drSearch.Filter = String.Format("(userpassword={0})", "hogepassword") drSearch.SearchScope = SearchScope.Subtree sResult = drSearch.FindOne sResult がnothingでなければパスワードが存在している処理になっております。 userpassword属性に対してFilterで、”hogepassword”を渡しているのですが、 うまく取得できておりません。 uid=hogeの階層の他の属性は取得できているのですが、 userpassword属性が取得できないもんだいにひっかかってしまいました。 userpassword属性はSSHA(デフォルト)で作成しております。 パスワードは何度か登録して確認してみたので、 パスワードの登録間違いはないと思います。 SSHAなのに”hogepassword”と文字列のまま渡しているのがいけないのでしょうか? もしご存知でしたら、お力添えの程よろしくお願いいたします。
お礼
ご指摘通りの方法で無事解決しました。 ありがとうございました。