Soit requis niveau d'emprunt d'identité n'a pas été fourni, ou la condition niveau d'emprunt d'identité n'est pas valide

Je vais avoir quelques problèmes avec un service WCF et l'usurpation d'identité, j'ai distillé à une simple méthode ci-dessous. Le service WCF est actuellement auto hébergé dans un fichier exe. Le message d'exception est "un requis niveau d'emprunt d'identité n'a pas été fourni, ou la condition niveau d'emprunt d'identité n'est pas valide". Vérification lorsque l'erreur est levée, l'Identité ImpersonationLevel est mis à la délégation, comme précisé sur mon client et son authentifié à l'aide de Kerberos.

Je suis un peu perplexe, car il me semble que les exigences de ImpersonationLevel et Authenticaiton ont été respectées. Ma pensée est que le problème est probablement à voir avec les paramètres de domaine, que j'ai défini et de penser sont correctement définies. J'ai donc deux questions:

  1. Si l'opération ci-dessous réussir? (ou est-il défectueux?)
  2. Quels paramètres doit être configurée sur une Win2k8 de domaine pour le faire fonctionner? Je suis de travail de deux cases qui sont membres de la même Win2k8 de domaine (c'est un domaine nouveau et joli à la vanille, avec l'intention de tester l'usurpation d'identité).

Code comme suit:

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string Test()
{
    WindowsIdentity identity = ServiceSecurityContext.Current.WindowsIdentity;
    using (identity.Impersonate())
    {
        ProcessStartInfo pi = new ProcessStartInfo(@"c:\temp\test.bat");
        pi.UseShellExecute = false;
        pi.RedirectStandardOutput = true;
        Process p = Process.Start(pi); //exception thrown here!
        p.WaitForExit();
        string o = p.StandardOutput.ReadToEnd();
        return o;
    }
}

Détails de l'Exception:

Win32Exception occurred: Either a required impersonation level was not provided, or the provided impersonation level is invalid
   at System.Diagnostics.Process.CreatePipeWithSecurityAttributes(SafeFileHandle& hReadPipe, SafeFileHandle& hWritePipe, SECURITY_ATTRIBUTES lpPipeAttributes, Int32 nSize)
   at System.Diagnostics.Process.CreatePipe(SafeFileHandle& parentHandle, SafeFileHandle& childHandle, Boolean parentInputs)
   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
   at MonetEnterprise.Service.SecurityService.Test()

Test.bat le contenu du fichier

echo %username%

L'utilisation du débogueur qu'est-ce que identity égal à avant, il va dans le using bloc?
Salut @Rahmhound, c'est le client d'ouverture de session - c'est ce que vous attendez de la droite?
Délégation est désactivé par défaut dans les domaines NT. Si c'est nécessaire (dirait qu'il est), alors vous devez activé. Voir Activation de la Délégation Contrainte ou Comment faire pour activer le mode multi-hop usurpation d'identité à l'aide de la délégation contrainte .NET et Active Directory

OriginalL'auteur Martin Clarke | 2012-09-04