web-dev-qa-db-ja.com

認証にuidを使用するようにApacheDSでLDAPを構成するにはどうすればよいですか?

Apache Directory Studioを使用してdc=example,dc=comの下に新しいユーザーを追加すると、次のツリー構造になります。

dc=example,dc=com
|-- ou = engineering
     |-- cn = Lawrence K.H Loh+o=IKEA+sn=Loh+uid=lawrence+displayName=Lawrence

以下は、cnの属性リストです。

  1. objectClass = inetOrgPerson
  2. objectClass = organizationPerson
  3. objectClass = person
  4. objectClass = top
  5. cn =ローレンスK.Hロー
  6. sn = Loh
  7. displayName =ローレンス
  8. o = IKEA
  9. uid =ローレンス
  10. userPassword = SSHAハッシュパスワード

LDAP: error code 49 - INVALID_CREDENTIALS: Bind failed: Attempt to lookup non-existant entryを介してこのエントリを接続すると、このエラーuid=lawrence,ou=engineering,dc=example,dc=comが発生します。しかし、このcn=Lawrence K.H Loh+o=IKEA+sn=Loh+uid=lawrence+displayName=Lawrence,ou=engineering,dc=example,dc=comを使用している場合は、正常に機能しています。認証のために長い名前の代わりにuid=lawrenceに切り替える方法を教えてください。

1
huahsin68

その特定のオブジェクトでは、それができる可能性は低いです。 LDAPは、オブジェクトの識別名(DN)でバインドするユーザーを探しています。この場合の主要な属性は、cnです。コンテナ内のオブジェクトの特定の属性が、DNに関連付けられている属性以外に一意であるという保証はないため、これは意図的な設計上の決定です。

これにより、サービスがディレクトリを検索してuid=lawrenceはその特定のDNに関連付けられています(したがって、そのオブジェクトから必要な他の属性を見つけることができます)が、DNに対して明示的に実行する必要がある呼び出しは、プライマリ属性に対してのみ実行できます。

これは、DNの指定を回避できる方法がないということではありません。 SASL認証を実装し、SASLIDとDNの間のマップを定義することが思い浮かびます。ただし、質問のコンテキスト内では、いいえ、認証先のDNの非プライマリ属性をDNの代わりに使用するように切り替えることはできません。

2
Andrew B