<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>VSDOTNET - Securité</title>
    <link>http://www.vsdotnet.ch/</link>
    <description>Un peu de mon expérience dans le monde .NET</description>
    <language>en-us</language>
    <copyright>Stéphane Schwartz</copyright>
    <lastBuildDate>Mon, 27 Aug 2007 14:09:47 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>stephane@vsdotnet.ch</managingEditor>
    <webMaster>stephane@vsdotnet.ch</webMaster>
    <item>
      <trackback:ping>http://www.vsdotnet.ch/Trackback.aspx?guid=3ff718c3-218f-4ea4-851d-5ce30c53986c</trackback:ping>
      <pingback:server>http://www.vsdotnet.ch/pingback.aspx</pingback:server>
      <pingback:target>http://www.vsdotnet.ch/PermaLink,guid,3ff718c3-218f-4ea4-851d-5ce30c53986c.aspx</pingback:target>
      <dc:creator>Stéphane Schwartz</dc:creator>
      <wfw:comment>http://www.vsdotnet.ch/CommentView,guid,3ff718c3-218f-4ea4-851d-5ce30c53986c.aspx</wfw:comment>
      <wfw:commentRss>http://www.vsdotnet.ch/SyndicationService.asmx/GetEntryCommentsRss?guid=3ff718c3-218f-4ea4-851d-5ce30c53986c</wfw:commentRss>
      <title>Changer le WindowsIdentity en cours d’exécution (impersonalisation)…</title>
      <guid isPermaLink="false">http://www.vsdotnet.ch/PermaLink,guid,3ff718c3-218f-4ea4-851d-5ce30c53986c.aspx</guid>
      <link>http://www.vsdotnet.ch/2007/08/27/ChangerLeWindowsIdentityEnCoursDex%c3%a9cutionImpersonalisation.aspx</link>
      <pubDate>Mon, 27 Aug 2007 14:09:47 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#000000&gt;&lt;a href="http://www.blackberry.com/images/home_icons/security.gif" target=_top&gt;&lt;img height=48 src="http://tbn0.google.com/images?q=tbn:7r8tV8TaKWMtUM:http://www.blackberry.com/images/home_icons/security.gif" width=54&gt;&lt;/a&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&amp;nbsp;Par
défaut, le WindowsIdentity (system.security.principal) est celui de l’utilisateur
logué, et est récupérable en utilisant l’instruction suivante&amp;nbsp;:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 8pt; COLOR: #2b91af; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt"&gt;WindowsIdentity&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt"&gt;&lt;font color=#000000&gt;.GetCurrent()&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;font face="Courier New" color=#000000&gt;Dans le cadre d’un projet, j’avais besoin que
mon code s’execute temporairement sous une autre identité que celle de l’utilisateur
executant l’application. Après quelques recherche, voici les trois étapes a effectuer&amp;nbsp;:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#000000&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#000000&gt;1
- Se loguer avec le nouveau compte&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#000000&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#000000&gt;Pour
se faire, on va utiliser l’API advapi32, dont voici la signature&amp;nbsp;:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;font face="Courier New" color=#303030&gt;[DllImport("advapi32.dll", SetLastError=true)]&lt;br&gt;
public static extern bool LogonUser(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string lpszUsername, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string lpszDomain, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string lpszPassword, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int dwLogonType, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int dwLogonProvider, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;out IntPtr phToken&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;Le
code suivant&amp;nbsp;retourne vrai si le login à réussi. Il retourne surtout le handler
du token lié à ce login, que nous utiliserons plus tard.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;font face="Courier New" color=#303030&gt;LogonUser(&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 35.4pt"&gt;
&lt;font face="Courier New" color=#303030&gt;«&amp;nbsp;nom d’utilisateur&amp;nbsp;», &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font face="Courier New" color=#303030&gt;«&amp;nbsp;domaine&amp;nbsp;», &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font face="Courier New" color=#303030&gt;«&amp;nbsp;mot de passe&amp;nbsp;»,&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font face="Courier New" color=#303030&gt;2, &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font face="Courier New" color=#303030&gt;0, &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font face="Courier New" color=#303030&gt;ref TokenHandler)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;2
– Dupliquer le token&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;A
nouveau, il faut utiliser l’API advapi32&amp;nbsp;:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;font face="Courier New" color=#303030&gt;[DllImport("advapi32.dll", SetLastError=true)]&lt;br&gt;
public extern static bool DuplicateToken(IntPtr ExistingTokenHandle, int&lt;br&gt;
&amp;nbsp;&amp;nbsp; SECURITY_IMPERSONATION_LEVEL, out IntPtr DuplicateTokenHandle);&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;Le
code suivant&amp;nbsp;retourne vrai si la duplication à réussie. Il retourne aussi le
token utiliser plus tard afin de créer un nouveau WindowsIdentity.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;DuplicateToken(&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;TokenHandler&lt;span style="FONT-SIZE: 10pt"&gt;, 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;2, 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font face="Courier New"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue"&gt;ref&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font color=#303030&gt; pDuplicateTokenHandle);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt 35.4pt"&gt;
&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;3
– Créer un nouveau WindowsIdentity&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#303030&gt;&lt;font face="Courier New"&gt;Opération
qui est un jeu d’enfant, via le code suitant&amp;nbsp;:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 8pt; COLOR: #2b91af; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt"&gt;WindowsIdentity&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt"&gt;&lt;font color=#000000&gt; newId
= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;WindowsIdentity&lt;/span&gt;&lt;font color=#000000&gt;(pDuplicateTokenHandle);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoBodyText2 style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;font face="Courier New"&gt;&lt;span style="COLOR: #2b91af; mso-bidi-font-size: 10.0pt"&gt;WindowsImpersonationContext&lt;/span&gt;&lt;font color=#303030&gt;&lt;span style="mso-bidi-font-size: 10.0pt"&gt; impersonatedUser
= newId.Impersonate();&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"&gt;&lt;font color=#000000&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: FR; mso-fareast-language: FR; mso-bidi-language: AR-SA"&gt;&lt;font color=#000000&gt;Dorénavant, &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #2b91af; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: FR; mso-fareast-language: FR; mso-bidi-language: AR-SA"&gt;WindowsIdentity&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: FR; mso-fareast-language: FR; mso-bidi-language: AR-SA"&gt;&lt;font color=#000000&gt;.GetCurrent()
retoune le nouveau WindowsIdentity et le code s’execute avec les droits de celui-ci.
Pour revenir à l’état avant impersonalisation, il suffit d’utiliser la méthode &lt;/font&gt;&lt;span style="COLOR: #33cccc"&gt;Undo&lt;/span&gt;&lt;font color=#000000&gt; de &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;WindowsImpersonationContext&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.vsdotnet.ch/aggbug.ashx?id=3ff718c3-218f-4ea4-851d-5ce30c53986c" /&gt;</description>
      <comments>http://www.vsdotnet.ch/CommentView,guid,3ff718c3-218f-4ea4-851d-5ce30c53986c.aspx</comments>
      <category>Securité</category>
    </item>
  </channel>
</rss>