2012-04-23 9 views
0

私は、内部のアプリケーション上にレガシーコードを改訂する必要があります。すべてをやり直す前に、認証するユーザーによってOUが異なる可能性のあるADへのバインドを簡単に行う方法があります。設定はかなり標準です:OUが可変であるPerlでActive Directoryにバインドする

my($mesg) = $ldap->bind ("cn=$uid,ou=Workers,ou=Domain Users,dc=something,dc=com", password => "$psswd"); 

すべてのユーザーが「労働者」のOUではありません。いくつかは異なるOUにあります...基本的に私が疑問に思うのは、perlからADにバインドするための "if-then-else"ルーチンがあるかどうかです。回避することができれば、これを検索する目的でサードパーティのアカウントを設定しない方がいいです...しかし、私が読んだほとんどのドキュメントはこのログイン方法を指しているようです。任意のアイデアや提案?

+0

ここで実際の問題は何ですか?あなたのコードには変数$ uidがすでに表示されていますが、変数$ ouの問題は何ですか? – EJP

+0

認証しているユーザーが異なるOUにある可能性があります。彼らが認証できるように、彼らがどのOUにいるかを指定させる必要があります。それは私がそれらを持っていることを望んでいない余分なステップです。 – oljones

+0

つまり、「変数OU」は必要ありません。可能なOUの数に対して、または可能なすべてのOUに対してフィルタリングする必要がありますか? – EJP

答えて

1

ADに完全DNを指定する必要はありません。ユーザー名は十分なはずです。

+0

($ uid、password => $ psswd)に変更しました。 「LDAP_INVALID_CREDENTIALS:間違ったパスワードが入力されたか、SASL資格情報を処理できなかったために死亡しました」というエラーが表示されます。動作していないようです。それはLDAPや一般的なADバインドに固有のものですか? – oljones

+0

これはWindowsの問題です。 Windows RSAT/supportツールのldp.exeを使用してバインドを検証することができます。機能させるには、接頭辞を \とする必要があります。 –

+0

私は「something.com \\ $ uid」と「$ uid \ @ something.com」として試しました。どちらも役に立たない。しかし、提案をありがとう。 – oljones

1

これは、パラメータとして識別名と識別名の資格情報を引数とする「単純な」バインド要求と呼ばれます。 0個以上の要求制御をバインド要求に含めることができます。バインド要求が送信される前に$distinguishedNameという変数を作成し、バインド要求を送信し、プロセス応答、および任意の応答コントロールが応答に含まれる処理:

my $namingContext = "ou=domain users,dc=something,dc=com"; 
my $distinguishedName = sprintf "%s,%s,%s",$cn,$ou,$namingContext; 
my $bindResult = $ldap->bind($distinguishedName,$credentials); 
# handle any response controls attached to the bind response ... 
+0

提案していただきありがとうございます。この方法では、最初のバインド結果が無効な場合は、OUを変更してバインドを再試行できますか? – oljones

+0

はい。バインド要求が成功して認証状態が設定されるまで、接続は認証されません。 LDAPクライアントがLDAPv3を使用している場合、成功したバインド要求ごとに接続認証状態が変更され、サーバーによって設定された制限が適用されます。 LDAPクライアントが接続の認証状態に関する情報を必要とする場合、[Who Am I?](http://tools.ietf.org/html/rfc4532)拡張操作を使用して認証状態を検出できます。サーバーは拡張操作をサポートし、その使用を許可します。 –

関連する問題