Artigo: 248187 - Última revisão: sexta-feira, 8 de Julho de 2005 - Revisão: 4.4 Como representar um utilizador do Active Server Pages Este artigo descreve representação e o contexto de segurança para páginas Active Server Pages (ASP). Fornece exemplos de código para uma biblioteca de ActiveX do Microsoft Visual Basic ligação dinâmica (DLL) que pode ser instanciada a partir de uma página ASP para haver uma apropriação da identidade do utilizador e alterar o contexto de segurança do thread actual. Por predefinição, o ASP é executado no contexto de segurança do utilizador representado. Quando é efectuado um pedido de um ficheiro ASP, o servidor Web utiliza um thread de trabalho e define o contexto de segurança do que thread para um utilizador representado. O método de autenticação do Internet Information Server (IIS) (anónimo, Basic, NT integrada etc.) determina o utilizador representado. Em seguida, o código ASP executa no contexto do utilizador. Ao representar um utilizador, pode resolver os seguintes conflitos de segurança da aplicação: - Aplicação que utiliza a segurança integrada (NTLM) do NT ou Kerberos para autenticação, necessita de aceder um recurso de rede (tal como um ficheiro, base de dados do Access ou SQL Server) através do protocolo de pipes nomeados.
- Aplicação que acede a um recurso de rede do evento Session_OnEnd ou Application_OnEnd .
Os eventos de Session_OnEnd e Application_OnEnd executado com a identidade do processo. Para aplicações de protecção da aplicação em processo ou inferior, é o ID de utilizador do sistema e o processo é o ficheiro de Inetinfo.exe. Em vez de a representar, pode executar num processo de memória separado ou com protecção da aplicação (isolada) alta e definir a identidade do pacote do Microsoft Transaction Server (MTS) ou aplicação COM + para o ID de utilizador pretendido. - Aplicação que suporte a múltiplos utilizadores estão a ligar o WinNT: / / espaço de nomes através do Microsoft Active Directory do serviços de interface (ADSI).
Estas ligações são colocados em cache com as credenciais de segurança do primeiro utilizador que abre a ligação. Representar assegura que um utilizador único abre a ligação, como resultado, as credenciais do utilizador correspondem as credenciais em cache.
Representação utiliza estas três funções: - A função de LogonUser recebe as informações de início de sessão (ID de utilizador, palavra-passe etc.) e devolve o token de segurança para um início de sessão válido.
- A função de ImpersonateLoggedOnUser recebe o token de segurança de LogonUser e aplica-o thread actual.
- A função de RevertToSelf devolve o thread ao contexto de segurança do processo de origem.
RevertToSelf é muito importante quando representar a partir de ASP. É chamado antes de LogonUser e ImpersonateLoggedOnUser para garantir que o contexto de segurança actual tem a capacidade para representar. (Se já está representada, que são de ASP, é mais provável que não tem autoridade necessária para representar.) RevertToSelf denomina-se no final do processamento de páginas para garantir que a utilização seguinte do thread tem o contexto de segurança apropriado, ou seja, a identidade do processo de origem.
A seguinte DLL de ActiveX tem dois métodos: início de sessão e terminar sessão . início de sessão altera o contexto do thread para um novo ID de utilizador e terminar sessão reverte para a identidade do processo de origem. Para criar a DLL, execute os seguintes passos: - No Visual Basic 6.0, crie um novo projecto de DLL de ActiveX denominado LoginAdmin.
- Alterar o nome do módulo de classe inicial para ImpersonateUser.
- Adicionar um módulo, LogonAPIs.bas, o nome do projecto, e, em seguida, colar o código seguinte para efectuar a API chama disponível para a 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 - Abrir o módulo de classe ImpersonateUser e, em seguida, cole o código seguinte para criar métodos de início de sessão e terminar sessão :
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 nota : A chamada de LogonUser transmite um tipo de início de sessão de LOGON32_LOGON_INTERACTIVE. O início de sessão interactivo permite-na aceder a recursos de rede que outros tipos de início de sessão não. - Guarde os ficheiros de projecto.
- No menu ' ficheiro ', clique em Criar LoginAdmin.dll para compilar a DLL de ActiveX.
- Copiar LoginAdmin.dll para o servidor de Web e, em seguida, utilize Regsvr32.exe para registar (escreva regsvr32.exe c:\components\LoginAdmin.dll uma linha de comandos).
- Depois da DLL de ActiveX é registada, pode chamá-lo a partir uma página ASP da seguinte forma:
<%
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
%>
Nota : quando chamar RevertToSelf , a página ASP for executada no contexto de segurança do processo. Para aplicações dentro do processo, esta é a conta de sistema. No entanto, para aplicações isoladas ou em pool, esta é a identidade do pacote do COM + que está configurado para as aplicações agrupadas ou para a própria aplicação isolada. <computername>Por predefinição, a identidade destes pacotes COM + está definida para IWAM_ <nomecomputador>. Se esta conta não tiver privilégios de "Actuar como parte do sistema operativo", a chamada subsequente LogonUser falha devido a uma violação de permissões. <computername>Como solução, um activa "Actuar como parte do sistema operativo" privilégios para o IWAM_ <nomecomputador> conta ou configurar a identidade do pacote de COM + para ser executado uma conta com estes privilégios.
A informação contida neste artigo aplica-se a:- Microsoft Active Server Pages 4.0
- Microsoft Internet Information Server 4.0
- Serviços de informação Internet 5.0 da Microsoft
| 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/
)
| |