Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde masters.
To precisando muito fazer um sistema de login com acesso ao AD(Active Directory) para verificar os usuários e retornar os dados dos mesmos e em outra consulta trazer todos os usuários.
Consigo verificar a conexão, se o usuário está autenticado ou não porém não consigo trazer os resultados, não sei se estou filtrando, mas a verdade que não sei como definir DN, OU, domínio, essas coisas. Já estou há uma semana tentando e nada, e preciso com urgência. Desde já agradeço a ajuda de vocês. No aguardo.
O endereço do servidor(CONEXÃO VPN) que preciso é Allen.corp, o dominio é Allenbr\\.
Abaixo o código:
$ldap_server = "ldap://allenbr.corp";
$auth_user = "allenbr\\nome.sobrenome";
$auth_pass = "*********";
$usuario = "nome.sobrenome";
// Set the base dn to search the entire directory.
$base_dn = "dc=allenbr, dc=corp";
// Show People
$filter = "(&(objectClass=user)(objectCategory=person)(cn=*)(samaccountname=$usuario))";
// connect to server
if (!($connect=@ldap_connect($ldap_server))) {
die("Could not connect to ldap server");
}
// bind to server
if (!($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
die("Unable to bind to server");
}
// search active directory
if (!($search=@ldap_search($connect, $base_dn, $filter))) {
die("Unable to search ldap server");
}
$number_returned = ldap_count_entries($connect,$search);
$info = ldap_get_entries($connect, $search);
echo "The number of entries returned is ". $number_returned."<p>";
for ($i=0; $i<$info["count"]; $i++) {
// echo "Name is: ". $info[$i]["name"][0]."<br>";
echo "Name: ". $info[$i]["displayname"][0]."<br>";
echo "Email: ". $info[$i]["mail"][0]."<br>";
echo "Fone: ". $info[$i]["telephonenumber"][0]."<br>";
echo "CONTA AD.: ". $info[$i]["samaccountname"][0]."<br>";
echo "GRUPO.: ". $info[$i][""][0]."<p>";//aqui "OU AD" do usuário que tem o mesmo nome do grupo
}
ldap_close($connect);>
Em 06/09/2017 at 13:36, gabrieldarezzo disse:
Ocorre algum erro?
O código acima retorna oq?
Trabalhei em uma empresa que fazia isso porem usava a abstração do ZF1, talvez te ajude
https://framework.zend.com/manual/1.10/en/zend.auth.adapter.ldap.html
Então, consegui resolver com outro código, o meu erro era que estava inserindo OU errado. Mas li o artigo que você passou e deu pra clarear um pouco as idéias sobre DN, OU. Muito obrigado, abaixo o código funcionando.
$adServer = "ldap://allenbr.corp";
$ldap = ldap_connect($adServer);
$username = strip_tags(trim($_POST['username']));
$password = strip_tags(trim($_POST['password']));
$ldaprdn = 'allenbr' . "\\" . $username;
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = @ldap_bind($ldap, $ldaprdn, $password);
if ($bind) {
$filter="(sAMAccountName=$username)";
$result = ldap_search($ldap,"dc=ALLENBR,dc=CORP",$filter); // apenas retirei o OU, e deixei o DC
//ldap_sort($ldap,$result,"sn"); essa função ldap_sort está obsoleta, então comentei, não funciona
$info = ldap_get_entries($ldap, $result);
for ($i=0; $i<$info["count"]; $i++)
{
if($info['count'] > 1)
break;
echo "<p>Você está acessando <strong> ". $info[$i]["sn"][0] .", " . $info[$i]["givenname"][0] ."</strong><a href='conectarAD.php?exe=exit'>Sair.</a><br /> (" . $info[$i]["samaccountname"][0] .") --- ".$info[$i]["proxyaddresses"][5]."</p>\n";
echo '<pre>';
var_dump($info);
echo '</pre>';
$userDn = $info[$i]["distinguishedname"][0];
}
@ldap_close($ldap);
} else {
$msg = "Endereço de email / senha inválidos";
echo $msg;
}
Ocorre algum erro?
O código acima retorna oq?
Trabalhei em uma empresa que fazia isso porem usava a abstração do ZF1, talvez te ajude
https://framework.zend.com/manual/1.10/en/zend.auth.adapter.ldap.html