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 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 segmento atual. Por padrão, o ASP é executado no contexto de segurança do usuário representado. Quando uma solicitação de um arquivo ASP é feita, o servidor Web utiliza um segmento de trabalho e define o contexto de segurança do que segmento como um usuário representado. O método de autenticação de Internet Information Server (IIS) (anônima, Basic, integrada do NT e assim por diante) determina o usuário representado. Em seguida, o código ASP é executado no contexto do usuário. Quando você representar um usuário, você pode resolver os conflitos de segurança a seguir 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, por exemplo, um arquivo, um banco de dados do Access ou um SQL Server) através do protocolo de pipes nomeados.
- Um aplicativo que acessa um recurso de rede a partir 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 de memória separado ou com proteção alta (isolada) de aplicativo e definir a identidade do pacote Microsoft Transaction Server (MTS) ou aplicativo do COM + para a identificação do usuário desejado. - Um aplicativo que oferece suporte a vários usuários conectados ao WinNT: / / namespace por meio de 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 usuário único abre a conexão; como resultado, credenciais do usuário coincidir com as credenciais em cache.
Representação usa estas três funções: - A função de LogonUser recebe as informações de logon (identificação de usuário, senha e assim por diante) e retorna o token de segurança para um logon válido.
- A função ImpersonateLoggedOnUser recebe o token de segurança do LogonUser e o aplica ao segmento atual.
- A função RevertToSelf retorna o thread o 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 tem a capacidade de representar. (Se você já está representado, que são do ASP, provavelmente você não tem a autoridade necessária para representar.) RevertToSelf é chamado no final do processamento de página para garantir que o próximo uso do thread tenha o contexto de segurança apropriado, ou seja, a identidade do processo de origem.
A seguinte DLL ActiveX tem dois métodos: logon e logoff . logon altera o contexto do segmento para um novo ID de usuário e logoff reverte para a identidade do processo de origem. Para criar a DLL, execute as seguintes etapas: - No Visual Basic 6.0, crie um novo projeto de DLL ActiveX chamado LoginAdmin.
- Altere o nome do módulo classe inicial para ImpersonateUser.
- Adicionar um módulo, chamado LogonAPIs.bas, ao projeto, e em seguida, cole o seguinte código para fazer 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 - Abra o módulo de classe ImpersonateUser e cole o seguinte código 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. - Salve os arquivos de projeto.
- No menu Arquivo , clique em Criar LoginAdmin.dll para compilar a DLL ActiveX.
- Copiar LoginAdmin.dll para o servidor da Web e use Regsvr32.exe para registrá-lo (digite c:\components\LoginAdmin.dll regsvr32.exe em um prompt de comando).
- Depois que a DLL ActiveX é registrada, você pode chamá-lo a partir 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 pacote COM + que esteja configurado para o pool de aplicativos ou para o próprio aplicativo isolado. <computername>Por padrão, a identidade desses pacotes de COM + é definida como IWAM_ <nome_do_computador>. Se essa conta não tiver privilégios, chamada subseqüente para "funcionar como parte do sistema operacional" LogonUser falha devido a uma violação de permissões. <computername>Como solução alternativa, um habilitar "funcionar como parte do sistema operacional" privilégios para a conta de usuário IWAM_ <nome_do_computador> conta ou configurar a identidade de pacote COM + para execução sob 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
| kbmt kbhowto kbsecurity KB248187 KbMtpt |
Tradução automáticaIMPORTANTE: 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/
)
| |