Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pedrovisk

[Resolvido] Log Off no AD

Recommended Posts

Turma,

 

Possuo uma página para logar em meu servidor através do AD (Win 2003). Utilizando a variável ao lado Request.ServerVariables("AUTH_USER") para pegar o Login de rede e consultando uma tabela onde tenho um cadastro de usuários, faço o usuário LOGAR, funciona beleza. O meu problema está para FECHAR a Sessão que é criada, como o script abaixo faz.

 

Página Validar_Login_AD.asp

 

<%
'Recolhe as informações de Rede (Login)
Dominio	= "@dominio.com.br"
Login 	= Trim(Request.Form("txt_Login"))
Senha 	= Trim(Request.Form("txt_Senha"))
Login 	= LimpaLixo(Login)
Senha 	= LimpaLixo(Senha)

LoginAD	= ExpurgaApostrofe(Login)
LoginAD = LoginAD&Dominio
SenhaAD = ExpurgaApostrofe(Senha)
'Response.Write(LoginAD)&"<BR>"
'Response.Write(SenhaAD)
'Response.End()

On Error Resume Next 
Sub strErro(strMensagem)
	If err.number <> 0 Then
		Response.Write "<br><b>Erro "& err.number &" ocorreu enquanto """ & strMensagem & """: " & err.Description & " em " & err.Source & "<b><br>"
		err.Clear
		Response.End
	End If
End Sub

Session.Timeout = 120

'Const vbTextCompare = 1
usuAutenticado = False
Autenticacao = Request.ServerVariables("AUTH_TYPE")
If InStr(1, "_BasicNTLMNegotiate", Autenticacao, vbTextCompare) < 2 then
   Response.Buffer = True
   Response.Status = "401 Unauthorized"
   Response.AddHeader "WWW-Authenticate", "BASIC"
   Response.End
Else
  usuAutenticado = True
End If

Set oSysInfo = Server.CreateObject("ADSystemInfo")
strErro "Criando ADSystemInfo object"

adsPath = "LDAP://"&oSysInfo.UserName
strErro "Acessando oSysInfo.UserName"

Set DSO = GetObject("LDAP:")

'Executa a query no AD
Set curUserObj = DSO.OpenDSObject(adsPath, LoginAD, SenhaAD, ADS_SECURE_AUTHENTICATION) 
strErro("Criar OpenDSObject object, por favor, verifique se o Login e/ou Senha de Rede estão corretos!")

'Pega o LOGIN de rede do AD
LoginAD = curUserObj.sAMAccountName

'Recupera as informações do usuário através através do Login de Rede
SQL = "SELECT * FROM Usuario WHERE LoginCB = '"&LoginAD&"'"	
Set RS = Conx.Execute(SQL)
'Response.Write(SQL)
'Response.End()

'Recuperando o ID da Filial do usuário
SQL2 = "SELECT idLocal FROM Departamento WHERE (Handle = "&rs("IDDep")&")"
Set rsFi = Conx.Execute(SQL2)
'Response.Write(SQL2)
'Response.End()

IF NOT RS.EOF THEN
	Session("IDUsuario") 	= Rs("Handle")
	Session("IDEmissor") 	= Rs("IDEmissor")
	Session("Nivel") 		= Rs("Nivel")	
	Session("NomeUsuario") 	= rs("NomeUsu")
	Session("LoginCB") 		= rs("LoginCB")
	Session("EMailCB") 		= rs("EMailCB")				
	Session("Acesso") 		= (Rs("QTDACESSO")+1)
	Session("UltAcesso") 	= Rs("UltimoAcesso")
	Session("DtEntrada") 	= Now()
	Session("IP_Usuario") 	= Request.ServerVariables("REMOTE_ADDR")
	Session("Departamento")	= rs("IDDep")
	AlterouSenha			= Trim(rs("AlterouSenha"))				
	Session("Filial")		= rsFi("idLocal")
	
	'Fecha o recordset da filial do usuário
	rsFi.Close()
	Set rsFi = Nothing
				
	'---------------------------------------------------------------------------
	'#### ATUALIZA A ULTIMA VISITA E A QUANTIDADE DE VISITAS
	'---------------------------------------------------------------------------
	SQL = "UPDATE Usuario SET Usuario.QtdAcesso = "&Session("Acesso")&", Usuario.UltimoAcesso = '"& NOW() &"' WHERE (((Usuario.Handle)="&RS("Handle")&"));"
	'Response.Write SQL
	'Response.End()
	Set RSU = Conx.Execute(SQL)
	'---------------------------------------------------------------------------
	textosql = "INSERT INTO Acessos_Usuario (IDUsuario,Host,IP) VALUES ("&Session("IDUsuario")&",'" & Request.ServerVariables("remote_host") & "','" & Request.ServerVariables("remote_addr") & "');"
	Set gravaentra = Conx.Execute(textosql)	
	'Response.Write textosql
	'Response.End()

	Call Fecha_Conexao
	Response.Redirect("Inicial.asp")
Else
'Redireciona para o login através de formulário e autenticação no AD
	Response.Redirect("Login_AD.asp")
End If

Response.End()
%>

Página para realizar o Log Off:

 

<%
'Desloga o usuario
Response.Buffer = true
Session.Contents.RemoveAll()
Session.Contents.Remove("IdUsuario")
Session.Contents.Remove("Nivel")
Session.Contents.Remove("NomeUsuario")
Session.Contents.Remove("LoginCB")
Session.Contents.Remove("Acesso")
Session.Contents.Remove("UltAcesso")
Session.Contents.Remove("DtEntrada")
Session.Contents.Remove("IP_Usuario")
Session.Abandon
Response.Clear()
Response.Redirect "Login_AD.asp"
%>

Alguém sabe como fazer com que o script acima realize o Log Off do IIS?

 

Agradeço a quem puder ajudar.

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você fazendo o Session.Abandon(),

tendo o conteudo abaixo, em um link para essa pagina ele nao esta dando o log off ???

 

<%
Session.Contents.RemoveAll()
Session.Abandon()
Response.Redirect "Login_AD.asp"
%>

sempre usei assim, e funciona beleza

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xan,

 

Estou fazendo desta forma sim, através do arquivo Sair.asp , mas mesmo assim o cara fica "preso" ou logado do IIS. É como se não funcionasse Session.RemoveAll()

 

Será que eu não deveria altera a variável Request.ServerVariables("AUTH_USER") por uma outra que não prendesse ao IIS?

 

Obrigado pela ajuda,

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tentou

response.expires = 0
response.expiresabsolute = Now() -1
response.addHeader "pragma","no-cache"
response.addHeader "cache-control","private"
Response.CacheControl = "no-cache"

Session.Contents.RemoveAll()

Session.Abandon

e a opção "autenticação do windows integrada.." esta marcada dentro das configs do iis, verifique isso,

ou usar o Request.ServerVariables("LOGON_USER")

 

Ao utilizar autenticação baseada HTTP (por exemplo, Basic, NTLM, Digest, Kerberos), o Internet Explorer (IE) continuará enviando as mesmas credenciais para cada um pedido ao servidor até que uma das duas coisas acontecer: ou (a) o usuário fecha seu navegador ou (B) o servidor recusa a 401 credenciais com um código do status. link

 

você pode tentar forçar um usuário a reauthenticate após um certo período de tempo, especialmente após um período de inactividade. Isto pode resolver uma situação em que um usuário acidentalmente deixou sua máquina destravada e sua janela do navegador aberta, ou quando uma aplicação baseada sessão expirou.

 

No passado, teria três estratégias:

 

• enviar um status HTTP 401 para o cliente (por exemplo, Response.Status = 401)

• Redirecione o usuário para http://fakeuser:wrongpassword @ www.yoursite.com (este não funciona com o patch mais IE6). Desde fakeuser / Wrongpassword não é uma conta válida do Windows, o usuário será solicitado para introduzir credenciais válidas

• Utilizar o cliente do lado do controle ActiveX descrito em KB 195192

Com excepção da primeira opção (que fixa os Response.Status), os métodos são maioritariamente feia hacks IMHO.

 

Agora, temos uma nova forma de compensação do IE autenticação cache. Começando com IE6 SP1 o seguinte código javascript irá limpar IE credenciais do cache. Note que isto irá limpar o cache credenciais para todo o iexplore.exe processo, para que os usuários serão forçados a reautenticar a qualquer site a ser acessado por esse processo (no caso de ter várias janelas abertas o que aponta para vários sites):

 

/ / Limpar credenciais atuais

/ / Requer IE6 SP1 ou posterior

document.execCommand (ClearAuthenticationCache, false)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora deu certo Xan!

 

Algumas informações para qum quizer utilizar este código:

 

IIS conforme abaixo:

 

Imagem Postada

 

Página com o formulário para autenticar pelo BD (Manual):

 

<%
'Recolhe as informações de Rede (Login)
vNome 			= Trim(Request.ServerVariables("AUTH_USER"))
vComprimento 	= Len(vNome)
LoginAD 		= Mid(vNome,12,vComprimento)
'Response.Write(LoginAD)
'Response.End()
%>

<form action="Validar_Login_AD.asp" method="post" name="Acesso_Sistema" id="form-login" style="clear: both;">
	<p id="form-login-username">
		<label for="modlgn_username">Login de Rede</label>
		<input name="txt_Login" type="text" class="inputbox" id="modlgn_username" value="<%=LoginAD%>" size="15" />
	</p>

	<p id="form-login-password">
		<label for="modlgn_passwd">Senha de Rede</label>
		<input name="txt_Senha" id="modlgn_passwd" type="password" class="inputbox" size="15" />
	</p>
		<p id="form-login-lang" style="clear: both;">
		<label for="lang"></label>
		@casablanca.tur.br	</p>
	<div class="button_holder">
	<input type="submit" name="button" id="button" value="Submit" />
	<div class="button1">
		<div class="next">
			<a onclick="valida();">Login</a>
		</div>
	</div>
	</div>
	<div class="clr"></div>
	<input type="submit" style="border: 0; padding: 0; margin: 0; width: 0px; height: 0px;" value="Login" />
	</form>

Abraço,

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

maravilha, precisando estamos ae...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.