LDAPを使用してユーザーのパスワード認証を行う方法は?

アシュウィン:

ユーザーがLDAPサーバー経由で認証されるクライアントアプリ(OpenLDAPライブラリを使用)を書いています。

これは、ユーザーのuserPasswordの比較に失敗する、ハードコードされたサンプルプログラムです。

#include <stdio.h>
#include <ldap.h>
#define LDAP_SERVER "ldap://192.168.1.95:389"

int main( int argc, char **argv ){
    LDAP        *ld;
    int         rc;
    char        bind_dn[100];
    LDAPMessage *result, *e;
    char *dn;
    int has_value;

    sprintf( bind_dn, "cn=%s,dc=ashwin,dc=com", "manager" );
    printf( "Connecting as %s...\n", bind_dn );

    if( ldap_initialize( &ld, LDAP_SERVER ) )
    {
        perror( "ldap_initialize" );
        return( 1 );
    }

    rc = ldap_simple_bind_s( ld, bind_dn, "ashwin" );
    if( rc != LDAP_SUCCESS )
    {
        fprintf(stderr, "ldap_simple_bind_s: %s\n", ldap_err2string(rc) );
        return( 1 );
    }

    printf( "Successful authentication\n" );

    rc = ldap_search_ext_s(ld, "dc=ashwin,dc=com", LDAP_SCOPE_SUBTREE, "sn=ashwin kumar", NULL, 0, NULL, NULL, NULL, 0, &result);
    if ( rc != LDAP_SUCCESS ) {
        fprintf(stderr, "ldap_search_ext_s: %s\n", ldap_err2string(rc));
    }

    for ( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) {
        if ( (dn = ldap_get_dn( ld, e )) != NULL ) {
            printf( "dn: %s\n", dn );
            has_value = ldap_compare_s( ld, dn, "userPassword", "secret" ); 
            switch ( has_value ) { 
                case LDAP_COMPARE_TRUE: 
                    printf( "Works.\n"); 
                    break; 
                case LDAP_COMPARE_FALSE: 
                    printf( "Failed.\n"); 
                    break; 
                default: 
                    ldap_perror( ld, "ldap_compare_s" ); 
                    return( 1 ); 
            } 
            ldap_memfree( dn );
        }
    }

    ldap_msgfree( result );
    ldap_unbind( ld );
    return( 0 );
}

userPasswordは、LDAPサーバーで平文であれば機能します。MD5で暗号化されている場合は同じパスワードで、ldap_compare_sは失敗します。これは、比較するクリアテキストのパスワードを渡しているためです。

このサンプルプログラムを機能させるにはどうすればよいですか?

私はこれを正しく行っていますか?ldap_compare_sLDAP経由でユーザーを認証するために使用することは正しいですか?

PS:私がLDAPに取り組んでいるのはこれが初めてです。

ペテシュ:

これは、LDAPでパスワードチェックを実行するための実際の正しい方法ではありませんdn。最初の検索から取得したパスワードと指定されたパスワードを使用してバインドを試みることです。

つまり、2番目のバインドを実行してパスワードを検証します。バインドが失敗した場合、パスワードは正しくありません。

次のようなもの:

    if ( (dn = ldap_get_dn( ld, e )) != NULL ) {
        printf( "dn: %s\n", dn );
        /* rebind */
        ldap_initialize(&ld2, LDAP_SERVER);
        rc = ldap_simple_bind_s(ld2, dn, "secret");
        printf("%d\n", rc);
        if (rc != 0) {
            printf("Failed.\n");
        } else {
            printf("Works.\n");
            ldap_unbind(ld2);
        }
        ldap_memfree( dn );
    }

セキュリティ上の理由から、ユーザー名が正しくないこと(つまり、ユーザーアカウントの検索が失敗したこと)は、一般に過度の開示と見なされ、回避する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JNDIを使用したLDAPユーザーパスワード認証

分類Dev

指定されたLdapContextを使用して、JavaでLDAPのユーザーパスワードを確認する方法

分類Dev

Spring Securityを使用して、ユーザー名とパスワードではなくIDとパスワードでユーザーを認証する方法

分類Dev

c#を使用してAzureADに対してユーザーのパスワードを認証する方法

分類Dev

root権限なしでPAMを使用してユーザー名/パスワードを認証する方法

分類Dev

C ++用のユーザー名/パスワード認証を使用したThriftsasl

分類Dev

LDAP認証用のユーザー名とパスワード

分類Dev

自分で認証を行う方法(ユーザーが入力したユーザー名とパスワードを確認する)

分類Dev

LDAP:認証のためにシステムID /パスワード、次にユーザーID /パスワードを介してバインドする方法は?

分類Dev

JDBCを使用してユーザー名とパスワードの認証を実装する

分類Dev

AndroidのFirestoreでユーザー名とパスワードのみを使用して認証する

分類Dev

LDAPユーザーのユーザー名とパスワードを手動で確認する方法

分類Dev

シンボルを使用してAndroidでユーザー名とパスワードを検証する方法は?

分類Dev

ユーザー名とパスワードの認証を一度に行うGitクローン

分類Dev

Firebaseは電話番号を確認してから、Swiftを使用してメール/パスワードでユーザーを認証します

分類Dev

ユーザー名とパスワードを使用したKeyvault認証

分類Dev

メールとパスワードを使用してFirebaseユーザーを再認証する

分類Dev

ユーザー名とパスワードを使用して Google 認証トークンを取得する

分類Dev

nodejs、expressおよび基本認証を使用して、ユーザー名とパスワードを取得するにはどうすればよいですか?

分類Dev

ソルトおよびハッシュされたパスワードとユーザー名に対してユーザーを認証する方法は?

分類Dev

メール/パスワードを使用したFirebase認証はユーザーに匿名で署名します

分類Dev

GitHub APIでの基本認証には、ユーザー名とパスワードを指定してInvoke-WebRequestを使用します

分類Dev

GitHub APIでの基本認証には、ユーザー名とパスワードを指定してInvoke-WebRequestを使用します

分類Dev

認証プロキシを使用してVisual Studio CodeのユーザーIDとパスワードを指定する方法

分類Dev

安全でないmd5md5を使用して認証用のユーザー名とパスワードを取得する方法

分類Dev

ユーザー名とパスワードを使用してKuberneteskubectlで認証するにはどうすればよいですか?

分類Dev

Androidを使用したFirebaseのメールとパスワードの認証-ユーザーの登録

分類Dev

ユーザーのパスワードを使用してユーザー名を暗号化することは、ユーザーがサービスにログインできるようにするための実行可能で安全な方法ですか?

分類Dev

pkgcloudを使用してOpenStackでユーザー名とパスワードを認証する

Related 関連記事

  1. 1

    JNDIを使用したLDAPユーザーパスワード認証

  2. 2

    指定されたLdapContextを使用して、JavaでLDAPのユーザーパスワードを確認する方法

  3. 3

    Spring Securityを使用して、ユーザー名とパスワードではなくIDとパスワードでユーザーを認証する方法

  4. 4

    c#を使用してAzureADに対してユーザーのパスワードを認証する方法

  5. 5

    root権限なしでPAMを使用してユーザー名/パスワードを認証する方法

  6. 6

    C ++用のユーザー名/パスワード認証を使用したThriftsasl

  7. 7

    LDAP認証用のユーザー名とパスワード

  8. 8

    自分で認証を行う方法(ユーザーが入力したユーザー名とパスワードを確認する)

  9. 9

    LDAP:認証のためにシステムID /パスワード、次にユーザーID /パスワードを介してバインドする方法は?

  10. 10

    JDBCを使用してユーザー名とパスワードの認証を実装する

  11. 11

    AndroidのFirestoreでユーザー名とパスワードのみを使用して認証する

  12. 12

    LDAPユーザーのユーザー名とパスワードを手動で確認する方法

  13. 13

    シンボルを使用してAndroidでユーザー名とパスワードを検証する方法は?

  14. 14

    ユーザー名とパスワードの認証を一度に行うGitクローン

  15. 15

    Firebaseは電話番号を確認してから、Swiftを使用してメール/パスワードでユーザーを認証します

  16. 16

    ユーザー名とパスワードを使用したKeyvault認証

  17. 17

    メールとパスワードを使用してFirebaseユーザーを再認証する

  18. 18

    ユーザー名とパスワードを使用して Google 認証トークンを取得する

  19. 19

    nodejs、expressおよび基本認証を使用して、ユーザー名とパスワードを取得するにはどうすればよいですか?

  20. 20

    ソルトおよびハッシュされたパスワードとユーザー名に対してユーザーを認証する方法は?

  21. 21

    メール/パスワードを使用したFirebase認証はユーザーに匿名で署名します

  22. 22

    GitHub APIでの基本認証には、ユーザー名とパスワードを指定してInvoke-WebRequestを使用します

  23. 23

    GitHub APIでの基本認証には、ユーザー名とパスワードを指定してInvoke-WebRequestを使用します

  24. 24

    認証プロキシを使用してVisual Studio CodeのユーザーIDとパスワードを指定する方法

  25. 25

    安全でないmd5md5を使用して認証用のユーザー名とパスワードを取得する方法

  26. 26

    ユーザー名とパスワードを使用してKuberneteskubectlで認証するにはどうすればよいですか?

  27. 27

    Androidを使用したFirebaseのメールとパスワードの認証-ユーザーの登録

  28. 28

    ユーザーのパスワードを使用してユーザー名を暗号化することは、ユーザーがサービスにログインできるようにするための実行可能で安全な方法ですか?

  29. 29

    pkgcloudを使用してOpenStackでユーザー名とパスワードを認証する

ホットタグ

アーカイブ