Este artigo descreve representação e o contexto de segurança para páginas ASP (Active Server Pages). 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 representar um 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 o thread para um utilizador representado. O método de autenticação Internet Information Server (IIS) (anónimo, Basic, integrada do NT e assim sucessivamente) determina o utilizador representado. Em seguida, o código ASP é executado no contexto do utilizador.
Quando representar um utilizador, pode resolver os seguintes conflitos de segurança da aplicação:
Uma aplicação que utilize segurança de NT integrada (NTLM) ou Kerberos para autenticar que necessita para aceder a um recurso de rede (tal como um ficheiro, uma base de dados do Access ou SQL Server) através do protocolo de pipes nomeados.
Uma aplicação que acede a um recurso de rede a partir do evento Session_OnEnd ou Application_OnEnd .
Os eventos Session_OnEnd e Application_OnEnd executar com a identidade do processo. Para aplicações de protecção de aplicação no processo ou inferior, este é o ID de utilizador SYSTEM e o processo é o ficheiro Inetinfo.exe. Em vez de a representar, pode executar um processo de memória separado ou com protecção alta (isolada) da aplicação e definir a identidade do pacote do Microsoft Transaction Server (MTS) ou aplicação COM + para o ID de utilizador pretendido.
Uma aplicação que suporte vários utilizadores que estão a ligar o WinNT: / / espaço de nomes através do Microsoft Active Directory Services 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 garante que um utilizador abre a ligação; como resultado, as credenciais do utilizador correspondem as credenciais em cache.
A função LogonUser recebe as informações de início de sessão (ID de utilizador, palavra-passe e assim sucessivamente) e devolve o token de segurança para um início de sessão válido.
A função ImpersonateLoggedOnUser recebe o token de segurança de LogonUser e aplica-o thread actual.
A função de RevertToSelf devolve o thread para o contexto de segurança do processo de origem.
RevertToSelf é extremamente importante quando representar a partir de ASP. É chamado antes de LogonUser e ImpersonateLoggedOnUser para garantir que o contexto de segurança actual tem capacidade para representar. (Se já está representada, que são de ASP, é mais provável que não tem a 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 apropriadas, ou seja, a identidade do processo de origem.
A seguinte DLL de ActiveX tem dois métodos: início de sessão e fim de 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 projecto ActiveX DLL novo denominado LoginAdmin.
Altere 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 seguinte código para efectuar a API de chamadas 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 os métodos de início de sessão e fim de 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 aos 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 Web e 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 de 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 aplicativos em processo, esta é a conta do sistema. No entanto, para aplicações isoladas ou agrupadas, esta é a identidade do COM + pacote está configurado para aplicações agrupadas ou para a própria aplicação isolada. <computername>Por predefinição, a identidade destes pacotes COM + está definida como IWAM_ <nomedocomputador>. 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, quer activar "Actuar como parte do sistema operativo" privilégios para IWAM_ <nomedocomputador> conta ou configurar a identidade do pacote de COM + para ser executado sob uma conta com estes privilégios.
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 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/
)
O que podemos fazer para melhor estas informações?
Para proteger a sua privacidade, não inclua as informações de contacto nos comentários.
Obrigado! Os seus comentários serão utilizados para nos ajudar a melhorar o conteúdo do suporte. Para obter mais opções de assistência, visite a Home Page da Ajuda e Suporte.