2009-09-16 6 views
3

J'ai un service WCF, hébergé dans IIS, dont j'ai besoin pour usurper l'identité du compte.Usurpation WCF

dans mon Webconfig

<authentication mode="Windows"/> 
<identity impersonate ="true"/> 

Test ce qui suit, avec VS2008

 public void ByRuleId(int ruleId) 
     { 
      try 
      { 
       string user = WindowsIdentity.GetCurrent().Name; 
       string name = Thread.CurrentPrincipal.Identity.Name; 
       ........ 

       //get the data as a string. 
       using (FileStream fs = File.Open(location, FileMode.Open)) 
       using (StreamReader reader = new StreamReader(fs)) 
       { 
        rawData = reader.ReadToEnd(); 
       } 

      } 
      catch..... 
     } 

cela fonctionne. si j'ajoute l'usurpation d'identité attribut

[OperationBehavior(Impersonation=ImpersonationOption.Required)] 
    public void ByRuleId(int ruleId) 

cela ne fonctionne pas avec le message d'erreur

« Soit un niveau d'emprunt d'identité requis n'a pas été fourni, ou le niveau d'emprunt d'identité fourni est invalide. »

un peu farfouillé je remarqué la première manière a été authentifié par Kerboros et la deuxième voie vient d'échouer sur le type d'authentification

J'utilise l'outil client WCF, pour passer mes lettres de créance. Cela semble fonctionner.

Répondre

0

l'objectif principal de c'était d'obtenir un accès anon, même tho MattK a été une aide précieuse.

Voici ce que j'ai fait pour le faire.

sur la mise en œuvre du contrat de WCF j'ai ajouté le

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class TransferFile : ITransferFile 

et dans le web.config

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled ="true" /> 

après j'ai pu usurper l'identité du compte anon

1

Vérifiez le 'TokenImpersonationLevel' de l'identité du thread en cours; vous en aurez besoin pour être au moins 'Usurpation d'identité' pour effectuer des opérations sur la machine sur laquelle le service s'exécute.

En règle générale, si vous utilisez un client proxy, vous devez définir le « TokenImpersonationLevel » du client:

http://www.devx.com/codemag/Article/33342/1763/page/4