web-dev-qa-db-ja.com

LDAP認証を開く-バインドせずにuserPasswordを確認する方法は?

私がしていること...

組織のすべてのマシン、ブログ、ウィキ、CRM、HRM、プロジェクト管理ツール、SVNなどにシングルサインオンを実装しようとしています...

CentOSを実行している専用サーバーにOpenLDAPをインストールして構成しました。 phpLdapAdminを使用して、さまざまなユーザー、クライアント、リソースに関する組織構造と情報を追加しました。

ユーザーのエントリ例...

DNは:: cn = Bill Gates、ou = users、dc = example、dc = com

ユーザーID :: bill.gates

メール:: [email protected]

userpassword :: as2%$%66789ds(一部のmd5暗号値)

私が今いるところ...

OpenLDdapは正常に機能しています。バインドテストも正常に実行されました。

やりたいこと...

より高い特権のユーザーを使用してバインドし、CNとは少し異なる入力されたユーザーIDまたはメールでユーザーを検索します。ポイントは、RDNの一部ではない属性に対してユーザーを認証したいということです。

行き詰まったところ...

  1. DNの一部ではないため、ユーザーIDを使用してバインドできません。これは一般的に許可されていますか?
  2. 別のLDAPユーザー、たとえば高特権ユーザーを使用してバインドし、ldap_searchを実行して、フィルターuserIdに基づいて一意のレコードを取得できますが、ユーザーが入力したパスワードのmd5がuserPasswordフィールドと一致しません。 OpenDLdapは、いくつかのソルトを使用して暗号化します。私も塩を取り除きたくありません。抜け道はありますか?

私の質問(最後に)

  1. RDNの一部ではない属性に対してldap_bindを実行できますか?
  2. 暗号化されていないパスワード(セキュリティのためにHTTPSトンネルを使用します)をOpenLDAPサーバーに送信し、OpenLDAPに暗号化してユーザーパスワードが提出されているかどうかを確認するように依頼できますか?これは通常、すべてのWebアプリで行いますよね?
  3. (トピック外)ユーザーIDにを含めることができます。 (ドット)とスペース。 「FirstName(givenName)」と「LastName(sn)」の間に文字が必要です。どちらが安全なキャラクターですか?世界のすべて(またはほとんど)のアプリケーションでユーザー名に許可されている非数字の文字はどれですか?

私の最大の関心事は、ほとんどのアプリで簡単に機能するようにすることができるアプローチを採用することです。ミッションのシングルサインオン中に変更するWebベースのアプリやデスクトップソフトウェアなどがたくさんあります。

読んでくれてありがとう...そして助けてくれてありがとう!

-ラフル

2
rahul286

最初の質問について:

私は、さまざまなユーザー属性に対して「ログイン」を許可する別のLDAPシステムを使用しました。解決策は、2つの接続を行うことでした。最初の接続は、おそらく匿名でバインドされており、ユーザーが指定した情報を使用してLDAPにクエリを実行し、ユーザーオブジェクトのRDNを特定します。 2番目の接続は、検出されたRDNと指定されたパスワードを使用してパスワードとのバインドを試みます。これは2段階のプロセスであり、機能します。

ただし、このアプリがRDN自体ではない提供された属性で多くのログインを取得する場合は、それらの属性にインデックスを付けることをお勧めします。それはパフォーマンスの問題です。

二:

私が覚えている限り、OpenLDAPはLDAP-SSL(TCP/636)をサポートしています。これは、HTTPSトンネルよりも優れたルートである可能性があります。デフォルトでは、LDAPバインドはクリアされていますが、追加のメソッドを許可するLDAP拡張機能があります。 Active Directoryでは、たとえばNTLM LDAPバインドが許可されており、LDAPもある時点でカーネル化されていると確信しています。 openLDAPがサポートするメソッドがわかりません。

三:

属性に「[email protected]」形式の電子メールを含むLDAPソースがあります。それがより厄介になるのはネーミング属性であり、それが私のopenLDAPエクスペリエンスがフラットになるところです。 itがそれをサポートしているのかわかりません。 Active Directoryでは名前付け属性にスペースが許可されており、Novell eDirectoryではスペースとピリオドの両方が許可されていることを知っています(ただし、そうすることはお勧めしません)。通常、名前付け属性はuserIDであり、givenName、surname、emailAddressなどの属性には特殊文字が含まれます。属性に名前を付けていないため、同じ制限はありません。

5
sysadmin1138

OpenLDAPを具体的に支援するのに十分な知識がないのではないかと思いますが、OpenDSの IDマッピング機能 に類似した機能があるのではないかと思います。あなたが使用できること。

クライアントはカスタムIDで自分自身を識別でき、マッピングは正規表現を使用してこれをユーザーのエントリの他の属性と照合するという考え方です。 OpenDSでは、これはSASLオプションを使用しているように見えるため、それらのツールを使用して、次のようなオプションを提供できます。

bin/ldapsearch --saslOption authid=u:dominic --saslOption mech=PLAIN [..]

次に、認証IDがIDマッパーによって使用されます。この場合、IDマッパーはユーザーエントリのuid属性と一致します。

お役に立てば幸いです。

0
Dominic Cleal