Numéro d'article: 248187 - Dernière mise à jour: vendredi 8 juillet 2005 - Version: 4.4

Comment faire pour emprunter l'identité d'un utilisateur à partir de pages ASP

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.
Agrandir tout | Réduire tout

Résumé

Cet article décrit l'emprunt d'identité et le contexte de sécurité pour les pages ASP (Active Server Pages). Il fournit des exemples de code pour une Microsoft Visual Basic ActiveX dynamic-link bibliothèque (DLL) qui peut être instancié à partir d'une page ASP pour emprunter l'identité d'un utilisateur et de modifier le contexte de sécurité de la thread actuelle.

Par défaut, ASP s'exécute dans le contexte de sécurité de l'utilisateur avec emprunt d'identité. Lorsqu'une demande d'un fichier ASP est effectuée, le serveur Web utilise un thread de travail et attribue le contexte de sécurité de ce thread à un utilisateur avec emprunt d'identité. La méthode d'authentification Internet (IIS) (anonyme, Basic, NT intégrée et ainsi de suite) détermine l'utilisateur avec emprunt d'identité. Ensuite, le code ASP s'exécute dans le contexte de cet utilisateur.

Lorsque vous Emprunter l'identité d'un utilisateur, vous pouvez résoudre les conflits de sécurité suivants dans votre application :
  • Une application qui utilise sécurité NT intégrée (NTLM) ou de Kerberos pour authentifier auxquelles doit accéder une ressource réseau (comme un fichier, une base de données Access ou SQL Server) via le protocole canaux nommés.
  • Une application qui accède à une ressource réseau à partir de l'événement Session_OnEnd ou Application_OnEnd .

    Les événements Session_OnEnd et Application_OnEnd exécuter avec l'identité du processus. Pour les applications protection application in-process ou bas, ceci est l'ID d'utilisateur système et le processus est le fichier Inetinfo.exe. Plutôt que d'emprunt d'identité, vous pouvez exécuter dans un processus mémoire distinct ou avec une application élevée (isolée) protection et définissez l'identité du package Microsoft Transaction Server (MTS) ou l'application COM + à l'ID utilisateur désirée.
  • Une application qui prend en charge plusieurs utilisateurs connectés à la WinNT: / / espace de noms via Microsoft Services interface ADSI (Active Directory).

    Ces connexions sont mis en cache avec les informations d'identification sécurité du premier utilisateur qui ouvre la connexion. Emprunt d'identité garantit qu'un seul utilisateur ouvre la connexion ; par conséquent, informations d'identification de cet utilisateur correspondent aux informations d'identification mises en cache.

Plus d'informations

L'emprunt d'identité utilise ces trois fonctions :
  1. La fonction LogonUser reçoit les informations d'ouverture de session (ID d'utilisateur, mot de passe et ainsi de suite) et renvoie le jeton de sécurité pour une connexion valide.
  2. La fonction ImpersonateLoggedOnUser reçoit le jeton de sécurité de LogonUser et l'applique au thread actuel.
  3. La fonction RevertToSelf renvoie le thread au contexte de sécurité du processus d'origine.

    RevertToSelf est extrêmement important lorsque vous emprunter l'identité d'ASP. Elle est appelée avant LogonUser et ImpersonateLoggedOnUser pour vérifier que le contexte de sécurité actuel a la possibilité d'emprunter l'identité. (Si vous êtes emprunt déjà d'identité, qui sont à partir d'ASP, vous probablement êtes inutile l'autorité nécessaire pour emprunter l'identité.) RevertToSelf est appelé à la fin du traitement de la page pour vérifier que l'utilisation suivante de la thread a le contexte de sécurité appropriés, c'est-à-dire, l'identité du processus d'origine.
La DLL ActiveX suivant comporte deux méthodes : Ouverture et fermeture de session . Ouverture de session modifie le contexte de la thread en un nouveau code d'utilisateur et fermeture de session revient à l'identité du processus d'origine. Pour créer la DLL, procédez comme suit :
  1. Dans Visual Basic 6.0, créez un nouveau projet DLL ActiveX nommé LoginAdmin.
  2. Modifier le nom du module de classe initiale à ImpersonateUser.
  3. Ajouter un module intitulé LogonAPIs.bas, dans le projet, puis collez le code suivant pour que l'API appeler disponible pour votre 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. Ouvrez le module de classe ImpersonateUser, puis puis collez le code suivant pour créer les méthodes d'ouverture et fermeture de session :
       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
    Remarque : l'appel à LogonUser transmet un type d'ouverture de session de LOGON32_LOGON_INTERACTIVE. L'ouverture de session interactive permet accéder aux ressources réseau autres types d'ouverture de session n'est pas le cas.
  5. Enregistrer les fichiers de projet.
  6. Dans le menu Fichier , cliquez sur Créer LoginAdmin.dll pour compiler le fichier DLL ActiveX.
  7. Copiez LoginAdmin.dll sur le serveur Web et ensuite utilisez Regsvr32.exe enregistrer (tapez regsvr32.exe c:\components\LoginAdmin.dll à une invite de commandes).
  8. Une fois que la DLL ActiveX est enregistrée, vous pouvez appeler il à partir d'une page ASP comme suit :
       <%
         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
       %>
    					
Remarque : lorsque vous appelez RevertToSelf , la page ASP s'exécutera dans le contexte de sécurité du processus. Pour les applications en cours, ceci est le compte système. Toutefois, pour les applications pool ou isolées, ceci est l'identité du package COM + qui est configuré pour pool d'applications ou pour l'application isolée proprement dite. <computername>Par défaut, l'identité de ces packages COM + est définie sur IWAM_ <nom_ordinateur>. Si ce compte n'a pas privilèges « agir en tant que partie du système d'exploitation », l'appel suivante LogonUser échoue à cause d'une violation d'autorisations. <computername>En guise de solution de contournement, soit activer droits « Agir en tant que partie du système d'exploitation » pour le IWAM_ <nom_ordinateur> compte ou de configurer l'identité du package COM + pour s'exécuter sous un compte possédant ces privilèges.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Active Server Pages 4.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
Mots-clés : 
kbmt kbhowto kbsecurity KB248187 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 248187  (http://support.microsoft.com/kb/248187/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.