Inquiridor
Validar usuário e senha no Active Directory com ASP

Pergunta
-
Bom pessoal, estou com dificuldade em validar um usuário no Ad, preciso chamar um ASP por uma função JavaScript para que seja validado o usuário e senha.
segue o meu código:
Código em Html para a textarea para usuário e senha ->
span class="style3"> Usuário: </span> <br>
<input id="useridValida" name="useridValida" class="txtarea" type="text" value="<%=Idlogquery("id_usuario")%>" style="width:150px" /> <br><br>
<span class="style3"> Senha:</span> <br>
<input id="passwdValida" name="passwdValida" class="txtarea" type="password" value="" style="width:150px" /> <br><br>
Botão que chama a função JavaScript ->
<div style=";top:80%;left:16%;float:left" id="divBotoes" >
<input type=submit value="Validar" id="validar" onclick="validarLogin();" />
</div>
Função Java Script ->
function validarLogin(){
var useridValida = document.getElementById("useridValida").value;
var passwdValida = document.getElementById("passwdValida").value;
if ((useridValida == '') && (passwdValida == '')) {
alert("Por favor informe seu login e senha de acesso ao sistema.");
return false;
}
if (useridValida == '') {
alert("Por favor informe seu login de acesso ao sistema.");
return false;
}
if (passwdValida == '') {
alert("por favor informe sua senha de acesso ao sistema.");
return false;
}
Estou chamando o asp por esse codigo a baixo, mas não esta dando certo -->
window.location.href("../tramitacao/login_valida_teste.asp?useridValida=" + useridValida + "&passwdValida=" + passwdValida)
}
function Alerta(tipo){
switch (tipo){
case 'invalid':
alert("Login ou senha Invalido");
break;
case 'block':
alert("Usuário bloqueado, favor entre em contato com a unidade de Documentos.");
break;
}
}
Programa Asp -->
<head>
<meta http-equiv="Content-Type" content="text/html;" />
<%
' User levels
Const ewAllowAdd = 1
Const ewAllowDelete = 2
Const ewAllowEdit = 4
Const ewAllowView = 8
Const ewAllowList = 8
Const ewAllowSearch = 8
Const ewAllowAdmin = 16
dim pagina
dim sUserId
dim sPassWd
dim bValidPwd
dim sSql
dim rs
dim usuario, login, ip, data_hora
dim caracter
dim i
dim teste
dim strDomainUser, strPassword, strDomain, objRootDSE, objDSObj, objAuth
'pagina=request.QueryString("pagina")
' Setup variables
sUserId = request("useridValida")
sPassWd = request("passwdValida")
sSql = "SELECT * FROM VW_ICO_COLABORADOR_FULL WHERE SG_SISTEMA='DOC' AND ID_USUARIO = '" & trim(sUserId) & "' "
response.Write(sSql)
response.Write("senha= "&sPassWd)
response.End
Set rs = retornaRs(sSql)
'Validação do usuário no Active Directory
strDomainUser = sUserId
strPassword = sPassWd
strDomain = "APEX"
' on error resume next
' Set objDSObj = GetObject("LDAP:")
' Set objAuth = objDSObj.OpenDSObject("LDAP://ou=APEX-users,dc=apex,dc=brasil", strDomain & "\" & strDomainUser, strPassword, 1)
dim strComputer, strNameSpace, strUser, objWbemLocator, objDSO, objComputer
strUser = strDomainUser
on error resume next
Set objDSObj = GetObject("LDAP:")
Set objComputer = objDSObj.OpenDSObject("LDAP://ldap.apex.brasil/OU=APEX-users,DC=APEX,DC=brasil", strUser, strPassword, 1)
response.write("erro="&Err.number)
responde.end
If Err.number = -2147023570 then
response.redirect("login.asp?login=invalid")
response.End
elseif err.number = -2147016672 then
response.redirect("login.asp?login=invalid")
response.End
elseif err.number = -2147463168 then
response.redirect("login.asp?login=invalid")
response.End
elseif err.number <> 0 then
response.Write err.number & " - " & err.Description
response.End
End If
if err.number = 0 then
If not rs.Eof Then
if rs("ID_SITUACAO") = "3" then 'usuário bloqueado
response.Redirect("/saida/usuarioBloqueado.asp")
elseif rs("ID_SITUACAO") = "2" then ' usuário não está desativado
response.Redirect("/saida/usuarioDesativado.asp")
End If
End If
else
response.redirect("login.asp?login=invalid")
End If
%>
</head>
</html>
Todas as Respostas
-
Qual erro está ocorrendo? No arquivo Programa.asp, comente a linha "on error resume next" e veja a mensagem de erro que está retornando.
Passar login e senha por querystring com javascript, não é uma boa prática. Recomendo que você crie um form de validação e faça um POST para a página asp que irá proceder com a autenticação.
-
Essa classe resolve seu problema:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; using System.DirectoryServices.AccountManagement; namespace ConsoleApplication1 { public struct Credentials { public string Username; public string Password; } public class Domain_Authentication { public Credentials Credentials; public string Domain; public Domain_Authentication(string Username, string Password, string SDomain) { Credentials.Username = Username; Credentials.Password = Password; Domain = SDomain; } public bool IsValid() { using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, Domain)) { // validate the credentials return pc.ValidateCredentials(Credentials.Username, Credentials.Password); } } } class Program { static void Main(string[] args) { Domain_Authentication da = new Domain_Authentication("usuario", "senha", "dominio"); if(da.IsValid()) Console.WriteLine("Login válido..."); else Console.WriteLine("Login inválido..."); Console.ReadKey(); } } }
Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985