web-dev-qa-db-ja.com

AuthLDAPURLのその他の検索フィルター

AuthLDAPURLに複数のsearchfilterを含めることはできますか?

Uidフィルターの例:

<Location /test/>
        AuthType Basic
        AuthName "Test"
        AuthBasicProvider ldap
        AuthUserFile /dev/null
        AuthLDAPURL ldap://example.test.com/o=test,c=com?uid
        AuthLDAPBindDN "******"
        AuthLDAPBindPassword ******
        require ldap-group cn=group01,o=test,c=com
</Location>

Uidまたはmailを検索する必要があります。お気に入り...

AuthLDAPURL ldap://example.test.com/o=test,c=com?uid|mail

ソリューション(それは私のために働きます):

Apache 2.4でテスト http://httpd.Apache.org/docs/current/mod/mod_authn_core.html

<AuthnProviderAlias ldap ldap-uid>
    AuthLDAPBindDN "******"
    AuthLDAPBindPassword ******
    AuthLDAPURL "ldap://example.test.com/o=test,c=com?uid??(&(isMemberOf=cn=group01,o=test,c=com))"
</AuthnProviderAlias>

<AuthnProviderAlias ldap ldap-mail>
    AuthLDAPBindDN "******"
    AuthLDAPBindPassword ******
    AuthLDAPURL "ldap://example.test.com/o=test,c=com?mail??(&(isMemberOf=cn=group01,o=test,c=com))"
</AuthnProviderAlias>


<Location "/test/">
    Order deny,allow
    Allow from all

    AuthType Basic
    AuthName "Login with mail or uid"
    AuthBasicProvider ldap-uid ldap-mail
    LDAPReferrals Off
    Require valid-user
</Location>

Thx Tonin!

5
user1373150

私はあなたが属性uidまたはmailを探すことを意味していると思います(それらをフィルタリングしません)。 RFC 2255 では許可されていますが、LDAP URLで2つの異なる属性を使用することは、すぐにはできません。

mod_authnz_ldapのみ:不可能

Apache mod_authnz_ldap documentation は、URLが次のようでなければならないことを示しています:ldap://Host:port/basedn?attribute?scope?filter with

  • attribute:検索する属性。 RFC 2255 では、属性のコンマ区切りのリストを使用できますが、いくつ指定しても、最初の属性のみが使用されます。属性が指定されていない場合、デフォルトではuidが使用されます。使用するサブツリーのすべてのエントリで一意になる属性を選択することをお勧めします。
  • filter:有効なLDAP検索フィルター。指定しない場合、デフォルトは(objectClass = *)になり、ツリー内のすべてのオブジェクトが検索されます。フィルターは約8000文字に制限されています(ApacheソースコードのMAX_STRING_LENの定義)。これは、どのアプリケーションでも十分以上のはずです。

Mod_authn_aliasで2つのプロバイダーを使用する

ただし、別のApacheモジュール、つまり mod_authn_alias を追加すると、2つの異なるLDAPURLを異なる認証プロバイダーとして使用できます。これを機能させるには、次の内容を含む新しいファイル(Apache構成のルートに含まれます)を追加できます。

# Different LDAP attributes to be used as login
<AuthnProviderAlias ldap ldap-uid>
    AuthLDAPURL ldap://example.test.com/o=test,c=com?uid
    AuthLDAPBindDN "******"
    AuthLDAPBindPassword ******
</AuthnProviderAlias>
<AuthnProviderAlias ldap ldap-mail>
    AuthLDAPURL ldap://example.test.com/o=test,c=com?mail
    AuthLDAPBindDN "******"
    AuthLDAPBindPassword ******
</AuthnProviderAlias>

次に、<Location>ステートメントで、次の構成を使用します。

<Location /test/>
    AuthType Basic
    AuthName "Test"
    AuthBasicProvider ldap-uid ldap-mail
    AuthUserFile /dev/null
    require ldap-group cn=group01,o=test,c=com
</Location>

これは最初にuidを使用して認証を試行し、失敗した場合はmail属性を使用して試行します。このタイプの構成では、必要な数の異なるLDAPURLプロバイダーを追加できます。

ただし、LDAP検索では単一の値を返す必要がある必要があります。それ以外の場合は、複数のエントリのどれがどれになるかがわかりません。パスワードの確認に使用できます。これを実現するには、スコープ(oneの代わりにsub)または返されるエントリの数を制限する検索フィルターを使用できます。

追加ファイルは、<Location>または<VirtualHost>ディレクティブの外側のApache構成に追加する必要があります。これは、Apache構成のルートレベルに含める必要があります。もちろん、authn_aliasモジュールをアクティブにする必要があります。

6
Tonin