2012-11-06 44 views
6

私は現在、ldapjsがインストールされているnode.jsを実行しています。私の目的は、ユーザーがユーザー名とパスワードでログインできるようにldapjsを使用するシステムを持つことです。ldapjs認証(ユーザログイン設定)

私は今度はhttp://ldapjs.orgのドキュメントを読んでいますが、ldapとldapjsの実装の全体的な考え方を理解するのは苦労しています。

私は現在、私は以下を実行してサーバーに正常にバインドすることを可能にするドキュメント

var ldap = require('ldapjs'); 

var server = ldap.createServer(); 

server.bind('cn=root', function(req, res, next) { 
    if (req.dn.toString() !== 'cn=root' || req.credentials !== 'secret') 
    return next(new ldap.InvalidCredentialsError()); 

    res.end(); 
    return next(); 
}); 

server.listen(1389, function() { 
    console.log('LDAP server up at: %s', server.url); 
}); 

からこれを持っています。

ldapsearch -H ldap://localhost:1389 -x -D cn=root -w secret -LLL -b "o=myhost" objectclass=* 

しかし、私は上の理想的なセットアップは、ユーザーとパスワードの範囲を持っているだろう...

これが正しいアプローチであれば、ここかさえからどこへ行くのは本当にわからないんだ、とLDAP接続が成功すると、詳細が正しいことが確認され、trueまたはfalseが返された場合はfalseが返されます。

これについてもっと知るための優れたリソースを知っている人はいますか、それとも、基本的なクライアント/サーバーサイドコードを提案して、次にどこに行くのかを教えてください。

本当にありがとうございます。

多くのおかげ

答えて

17

私はldapjsを使用したことがないが、私はちょうどすぐにその一見不完全な文書で読んだものに基づいて、何」であると思われる、LDAPサーバまたはLDAPクライアントを実装するために使用することができます(つまり、既存のLDAPサーバーに対してアプリケーション内のユーザーを認証することを前提としています)。このドキュメントの例のほとんどは、特定のポートで待機し、バックエンドデータベースと対話するLDAPサーバーの作成に焦点を当てています。バックエンド・データベースとユーザーとパスワードのストアの間にLDAPベースのインターフェースを置こうとしない場合は、おそらくサーバーAPIは必要ありません。すでにLDAPサーバーが稼働している場合は、クライアントAPIを使用して次のような処理を行う必要があります。

1.認証サービスを含むディレクトリサービスを提供するLDAPサーバーに匿名でバインドします。対応するエントリのDN

var opts = { 
    filter: '(mail=USERNAME)', 
    scope: 'sub' 
}; 

client.search('ou=users,o=acme.com', opts, function(err, res) { 
    assert.ifError(err); 

    res.on('searchEntry', function(entry) { 
    console.log('entry: ' + JSON.stringify(entry.object)); 
    }); 
    res.on('searchReference', function(referral) { 
    console.log('referral: ' + referral.uris.join()); 
    }); 
    res.on('error', function(err) { 
    console.error('error: ' + err.message); 
    }); 
    res.on('end', function(result) { 
    console.log('status: ' + result.status); 
    }); 
}); 

3.GrabのDNのためのユーザ名(例えば、電子メールアドレス)によって

var ldap = require('ldapjs'); 
var client = ldap.createClient({ 
    url: 'ldap://my.ldap.server' 
}); 

2.Search:あなただけでこれを行うことができますように見えます返されたエントリ(entry.object)。このライブラリのドキュメンテーションは、これらのオブジェクトの使用方法(例えば、メソッドやプロパティなど)についてはあまり説明していません。したがって、実際にDirectory Serverから取得したエントリのDNのDNまたは文字列表現を実際に取得する方法を理解する必要があります。 DNことを使用してサーバーへ

4.Rebind:上記のバインドの

client.bind(DN_RETRIEVED, PASSWORD_USER_ENTERED, function(err) { 
    assert.ifError(err); 
}); 

5。結果は、認証が成功したかどうかを判断するために使用する必要がありますものです。

LDAPベースの認証のためにユーザー/パスワードデータストアの前にLDAPサーバーを実装する場合は、そのサーバーの例に従う必要があります。私は個人的にはこれが過度だと思っており、セキュリティ面では問題になる可能性があります。

+4

DNは、entry.object内に格納されます。それにアクセスするには、オブジェクトを 'entry.object.dn'と呼んでください(' console.log(entry.object.dn) 'は正しいフィールドであることを確認するのに役立ちます)。次に、このentry.object.dnをclient.bindに渡します。 'client.bind(entry.object.dn、password、function(err){...' –

関連する問題