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:
- Si l'opération ci-dessous réussir? (ou est-il défectueux?)
- 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%
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
Vous devez vous connecter pour publier un commentaire.
Elle est erronée, aussi longtemps que vous êtes en utilisant le .NET le Processus de la classe, il commence toujours avec la pièce d'identité du parent processus. Pour l'exécuter sous une autre identité, il semble que vous avez eu à utiliser l'api win32 CreateProcessAsUser (que je n'ai pas encore).
J'avais besoin de l'exécuter élevée (c'est à dire de Visual Studio en tant qu'Administrateur).
OriginalL'auteur Martin Clarke