J'essaye d'écrire un script Ruby qui vérifie si les informations d'identification de l'utilisateur sont valides en utilisant un serveur d'annuaire actif. Voici ce que j'ai essayé jusqu'à présent:Comment vérifier les informations d'identification de l'utilisateur à l'aide du répertoire actif et d'un script ruby
require 'rubygems'
require 'net-ldap'
host = '10.4.1.6'
port = 389
username = 'username'
password = 'password'
ldap = Net::LDAP.new
ldap.host = host
ldap.port = port
ldap.auth "CN=#{username},CN=Users,DC=companyname,DC=ad", password
if ldap.bind
puts 'YES!'
puts ldap.get_operation_result.message
else
puts 'NO :-('
puts ldap.get_operation_result.message
end
Si j'entre un nom d'utilisateur non existant et une chaîne vide comme un mot de passe, l'opération de liaison réussit. Si j'entre un nom d'utilisateur valide et un mot de passe valide/invalide/vide, l'opération de liaison échoue avec le message d'erreur 'Credentials invalides'.
J'ai regardé d'autres threads et lu la documentation de net-ldap mais je ne peux pas comprendre ce que je fais mal.
Quelqu'un peut-il me donner quelques idées sur la façon d'y parvenir?
Merci à l'avance pour toute réponse :-)
Edit:
Comme suggéré @StuartEllis, le problème était avec l'identifiant de l'utilisateur. Pour trouver le bon DN, je le script suivant (extrait de la documentation net-ldap):
ldap.auth "CN='adminUser',CN=Users,DC=companyname,DC=ad", 'adminUserPwd'
ldap.bind
treebase = "DC=companyname,DC=ad"
filter = Net::LDAP::Filter.eq("mail", "[email protected]")
attrs = ["mail", "cn", "sn","objectclass"]
ldap.search(:base => treebase, :filter => filter, :attributes => attrs, :return_result => false) do |entry|
puts entry._dump 0
end
je puis rejugé en utilisant mon script original (ci-dessus) avec le DN obtenu et le tour est joué!