2010-09-22 5 views
0

J'ai eu des difficultés à accéder à certaines (mais pas toutes) clés de registre de mon service Web. J'ai donc supposé (et confirmé avec quelques recherches) qu'il y a des restrictions de sécurité sur l'accès au registre. Y a-t-il du code ou un changement dans la configuration que je dois faire spécifiquement dans mon application C# .Net?Accès au registre à partir d'un service Web

Plus précisément, je suis en train de lire et écrire les valeurs du PageSetup sous "Software \ Microsoft \ Internet Explorer \ PageSetup"

+0

Le logiciel clé \ Microsoft \ Internet Explorer \ PageSetup est ... où? à HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ PageSetup? Alors cela signifie que vous voulez atteindre PageSetup d'un utilisateur particulier? Quel utilisateur? – Luxspes

+0

Oui, j'essaie d'obtenir le PageSetup à partir de HKEY_CURRENT_USER. Je suppose d'un compte utilisateur générique que je peux créer – marcwenger

Répondre

0

Après l'usurpation d'identité de l'utilisateur HKEY_CURRENT_USER sera inchangé. Vous devez utiliser RegOpenCurrentUser après l'emprunt d'identité de l'utilisateur et RegCloseKey.

Sinon, vous obtenez le SID de l'utilisateur et lire Registre de HKEY_USERS:

WindowsIdentity wi = HttpContext.Current.User.Identity as WindowsIdentity; 
if (windowsIdentity != null) { 
    SecurityIdentifier si = wi.User; 
    RegistryKey key = Registry.Users.OpenSubKey (si.Value + 
          @"\Software\Microsoft\Internet Explorer\PageSetup"); 
    // get some values which you need like 
    string top_margine = key.GetValue ("margin_top"); 
    key.Close(); 
} 
0

Vous pouvez utiliser System.Security.Principal.WindowsIdentity.GetCurrent() pour créer un méthodes Web qui renvoient le nom de l'utilisateur actuel (très probablement l'utilisateur spécial ASP_NET), puis augmentent les privilèges de l'utilisateur (ou modifient les paramètres de sécurité de la clé que vous voulez modifier de regedit pour que l'utilisateur sous lequel En cours d'exécution est capable de lire la partie du Registre

D'autre part, si j'ai raison et que vous voulez modifier HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Page Le programme d'installation, et votre objectif n'est pas de modifier les informations dans cette clé pour l'utilisateur ASP_NET, puis vous devrez vous authentifier auprès de votre service Web en utilisant un compte disponible sur le serveur. Pour cela, vous devrez configurer votre service web pour utiliser Windows. authentification dans Web.config:

<system.web> ... <authentication mode="Windows"/> <identity impersonate="true"/> ... </system.web>

Ensuite, vous obtenez le jeton d'utilisateur authentifié de Windows:

 

IIdentity WinId= HttpContext.Current.User.Identity; 
WindowsIdentity wi = (WindowsIdentity)WinId; 
 

et enfin vous utiliser le jeton Windows de l'utilisateur authentifié d'usurper l'identité temporairement l'utilisateur d'origine et retirer le usurpation d'identité jeton de l'actuel Thr ead lorsque vous avez fini d'usurper l'identité.

 

// Temporarily impersonate the original user. 
WindowsImpersonationContext wic = wi.Impersonate(); 
try 
{ 
    // Access resources while impersonating. 
} 
finally 
{ 
    // Revert impersonation. 
    wic.Undo(); 
} 
 

De cette façon, lorsque vous avez demandé WindowsIdentity.GetCurrent() vous obtiendrez le nom des fenêtres de compte d'utilisateur à authentifier (ce qui est appelé usurper l'identité temporairement l'utilisateur authentifié). Et vous auriez accès au HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ PageSetup de l'utilisateur que vous utilisé pour authentifier

Plus d'informations sur l'authentification Windows et l'usurpation d'identité ici: http://msdn.microsoft.com/en-us/library/ff647405.aspx

+0

J'ai créé l'emprunt d'identité avec succès (à des fins de test j'ai usurpé mon nom d'utilisateur qui a un accès au registre, et a les paramètres ou PageSetup.Mais je n'ai toujours pas beaucoup de clés. Si je regarde sous HKCU \ Software \ Microsoft \ Internet Explorer \ Main (pour l'en-tête), alors je vois seulement les noms de valeurs: NoUpdateCheck, NoJITSetup, Disable Setup Script.Est-ce un résultat d'usurpation d'identité incorrecte – marcwenger

+0

C'est le truc! beaucoup! – marcwenger

Questions connexes