ID do artigo: 248187 - Última revisão: sexta-feira, 8 de julho de 2005 - Revisão: 4.4

Como representar um usuário do Active Server Pages

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve representação e o contexto de segurança para páginas Active Server Pages (ASP). Ele fornece código de exemplo para uma biblioteca de vínculo dinâmico ActiveX do Microsoft Visual Basic (DLL) que pode ser instanciada em uma página ASP para representar um usuário e alterar o contexto de segurança do thread atual.

Por padrão, o ASP é executado no contexto de segurança do usuário representado. Quando é feita uma solicitação para um arquivo ASP, o servidor Web utiliza um segmento de trabalho e define o contexto de segurança do thread como um usuário representado. O método de autenticação de Internet Information Server (IIS) (anônimo, Basic, NT integrada e assim por diante) determina o usuário representado. Em seguida, o código ASP é executado no contexto de usuário.

Quando você representa um usuário, você pode resolver os seguintes conflitos segurança em seu aplicativo:
  • Um aplicativo que usa segurança integrada do NT (NTLM) ou Kerberos para autenticar que precise acessar um recurso de rede (como um arquivo, um banco de dados do Access ou um SQL Server) por meio do protocolo pipes nomeados.
  • Um aplicativo que acessa um recurso de rede do evento Session_OnEnd ou Application_OnEnd .

    Os eventos Session_OnEnd e Application_OnEnd executam com a identidade do processo. Para aplicativos de proteção do aplicativo em processo ou baixa, isso é a identificação de usuário do sistema e o processo é o arquivo inetinfo.exe. Em vez de representação, você pode executar em um processo separado de memória ou com proteção de aplicativo alta (isolada) e definir a identidade do pacote do Microsoft Transaction Server (MTS) ou aplicativo COM + a identificação do usuário desejado.
  • Um aplicativo que oferece suporte a vários usuários que estão se conectando o WinNT: / / espaço para nome através do Microsoft Active Directory Services Interface (ADSI).

    Essas conexões são armazenados em cache com as credenciais de segurança do primeiro usuário que abre a conexão. Representando garante que um único usuário abre a conexão; como resultado, credenciais do usuário coincidir com as credenciais em cache.

Mais Informações

Representação usa essas três funções:
  1. A função LogonUser recebe as informações de logon (ID de usuário, senha e assim por diante) e retorna o token de segurança para um logon válido.
  2. A função ImpersonateLoggedOnUser recebe o token de segurança de LogonUser e o aplica ao thread atual.
  3. A função RevertToSelf retorna o thread ao contexto de segurança do processo de origem.

    RevertToSelf é extremamente importante quando você representar do ASP. Ele é chamado antes de LogonUser e ImpersonateLoggedOnUser para garantir que o contexto de segurança atual tenha a capacidade de representar. (Se você já está representada, que são do ASP, provavelmente você não tem a autoridade necessária para representar.) RevertToSelf é chamado no final do processamento da página para garantir que o próximo uso do thread tenha o contexto de segurança apropriadas, ou seja, a identidade do processo de origem.
A seguinte DLL ActiveX tem dois métodos: logon e Logoff . logon altera o contexto do thread para uma nova identificação de usuário e Logoff reverte para a identidade do processo de origem. Para criar a DLL, execute as seguintes etapas:
  1. No Visual Basic 6.0, crie um novo projeto ActiveX DLL chamado LoginAdmin.
  2. Altere o nome do módulo de classe inicial para ImpersonateUser.
  3. Adicionar um módulo, denominado LogonAPIs.bas, para o projeto, e em seguida, colar o código a seguir para tornar a API chama disponível para sua classe:
       Public Declare Function LogonUser Lib "advapi32.dll" _
    Alias "LogonUserA" (ByVal lpszUsername As String, _
    ByVal lpszDomain As String, ByVal lpszPassword As String, _
    ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, _
    phToken As Long) As Long
    
       Public Declare Function ImpersonateLoggedOnUser Lib "advapi32.dll" (ByVal hToken As Long) As Long
    
       Public Declare Function RevertToSelf Lib "advapi32.dll" () As Long
    
       Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  4. Abra o módulo de classe ImpersonateUser e cole o código a seguir para criar os métodos de logon e Logoff :
       Private Const LOGON32_LOGON_INTERACTIVE = 2
       Private Const LOGON32_PROVIDER_DEFAULT = 0
    
       Public Sub Logon(ByVal strAdminUser As String, ByVal _
    strAdminPassword As String, ByVal strAdminDomain As String)
         Dim lngTokenHandle, lngLogonType, lngLogonProvider As Long
         Dim blnResult As Boolean
         
         lngLogonType = LOGON32_LOGON_INTERACTIVE
         lngLogonProvider = LOGON32_PROVIDER_DEFAULT
         
         blnResult = RevertToSelf()
         
         blnResult = LogonUser(strAdminUser, strAdminDomain, strAdminPassword, _
                                              lngLogonType, lngLogonProvider, _
                                              lngTokenHandle)
                                                              
         blnResult = ImpersonateLoggedOnUser(lngTokenHandle)
         CloseHandle (lngTokenHandle)
    
       End Sub
    
       Public Sub Logoff()
         Dim blnResult As Boolean
         
         blnResult = RevertToSelf()
       End Sub
    Observação : A chamada para LogonUser passa um tipo de logon de LOGON32_LOGON_INTERACTIVE. A configuração logon interativo permite acessar recursos de rede que outros tipos de logon não.
  5. Salve os arquivos de projeto.
  6. No menu arquivo , clique em Criar LoginAdmin.dll para compilar a DLL ActiveX.
  7. Copie LoginAdmin.dll para o servidor Web e, em seguida, use regsvr32.exe para registrá-lo (digite regsvr32.exe c:\components\LoginAdmin.dll em um prompt de comando).
  8. Depois que a DLL ActiveX é registrada, você pode chamá-lo em uma página ASP da seguinte maneira:
       <%
         Option Explicit
         Dim objLogon
    
         Set objLogon = Server.CreateObject("LoginAdmin.ImpersonateUser")
         objLogon.Logon "Userid", "Password", "Domain"
    
         'Body of code for the page.
    
         objLogon.Logoff
         Set objLogon = Nothing
       %>
    					
Observação : quando você chamar RevertToSelf , a página ASP será executado no contexto de segurança do processo. Para aplicativos em processo, isso é a conta do sistema. No entanto, para aplicativos em pool ou isolados, isso é a identidade do COM + pacote que está configurado para aplicativos em pool ou para o próprio aplicativo isolado. <computername>Por padrão, a identidade desses pacotes COM + é definida como IWAM_ <nome-computador>. Se essa conta não tiver privilégios "Funcionar como parte do sistema operacional", a chamada subseqüente LogonUser falha devido a uma violação de permissões. <computername>Como uma solução, ou ativar "Funcionar como parte do sistema operacional" privilégios para IWAM_ <nome-computador> conta ou configurar a identidade do pacote COM + para ser executado em uma conta que tenha esses privilégios.

A informação contida neste artigo aplica-se a:
  • Microsoft Active Server Pages 4.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
Palavras-chave: 
kbmt kbhowto kbsecurity KB248187 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 248187  (http://support.microsoft.com/kb/248187/en-us/ )
 

Traduções deste artigo

 

Related Support Centers