Frage

Ich brauche Hilfe über WCF und Autorisierung. Zur Zeit habe ich einen Klienten, die in einem Windows-Dienst gehostet als .NET-Remote Objekt aufruft und die einen WCF-Dienst (mit wsHttpBinding) ruft. Der WCF-Dienst ist die Windows-Authentifizierung mit nachrichtenbasierte Sicherheit.

Der Windows-Dienst ist mit einem speziellen Konto ausgeführt wird. Sobald ein Client Aufruf von .NET-Remoting-Objekt eintrifft wird die Thread.CurrentPrincipal an dem vom Kunden zur Verfügung gestellt Haupt gesetzt, so dass alle Aktionen mit den Anmeldeinformationen vom Client ausgeführt werden. Kein Problem so weit, jetzt hier kommt mein aktuelles Problem: Der WCF-Dienst sollte mit dem Client-Benutzer-Credentials aufgerufen werden. Afaik WCF verwendet die WindowsIdentity.GetCurrent die Berechtigungsinformationen für den Anruf zu erstellen. Als Thread.CurrentPrincipal die Identität ich für den Anruf verwenden möchten hält, dachte ich (hread.CurrentPrincipal.Identity als Windows) .Impersonate () macht den Job.

Aber jetzt erhalte ich statt einer WCF-Sicherheitsausnahme dieser Ausnahme: System.ComponentModel.Win32Exception: Keine Anmeldeinformationen verfügbar sind im Sicherheitspaket

Aufrufhierarchie:    bei System.IdentityModel.SspiWrapper.AcquireCredentialsHandle (String-Paket, CredentialUse Vorsatz, AuthIdentityEx & authdata)    bei System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle (String-Paket, NetworkCredential Credential, Boolean IsServer, String [] additionalPackages)    bei System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle (Security SBE, ClientCredentials ClientCredentials)    bei System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle (Security SBE, Binding Kontext)    bei System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.OnOpening ()    bei System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpening ()    bei System.ServiceModel.Channels.CommunicationObject.Open (Timespan timeout)    bei System.ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open (Timespan timeout)    bei System.ServiceModel.Security.SecurityUtils.OpenTokenProviderIfRequired (Security tokenProvider, Span timeout)    bei System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen (Timespan timeout)    bei System.ServiceModel.Channels.CommunicationObject.Open (Timespan timeout)    bei System.ServiceModel.Channels.ServiceChannel.OnOpen (Timespan timeout)    bei System.ServiceModel.Channels.CommunicationObject.Open (Timespan timeout)    bei System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call (ServiceChannel Kanal, Span timeout)    bei System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce (Timespan-Timeout, CallOnceManager Kaskade)    bei System.ServiceModel.Channels.ServiceChannel.EnsureOpened (Timespan timeout)    bei System.ServiceModel.Channels.ServiceChannel.Call (String Aktion, Boolean Einwege, ProxyOperationRuntime Betrieb Object [] in, Object [] outs, Span timeout)    bei System.ServiceModel.Channels.ServiceChannel.Call (String Aktion, Boolean Einwege, ProxyOperationRuntime Betrieb Object [] in, Object [] outs)    bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage method, ProxyOperationRuntime Betrieb)    bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke (IMessage message)

thx für jede Hilfe Martin

EDIT: Ich habe einen Fehler gemacht, die in diese Ausnahme führt, weil ich den Channel nach dem Identitätswechsel zu schaffen vergessen, aber jetzt bekomme ich eine andere Ausnahme, wo ich nicht wirklich sicher, wie man damit umgehen: System.IO.FileLoadException: Konnte Datei oder Assembly 'System.IdentityModel.Selectors, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' oder eine ihrer Abhängigkeiten laden. Entweder eine geforderte Identitätswechselebene nicht vorgesehen ist, oder die gelieferte IdentitätswechselEbene ist ungültig. (Ausnahme von HRESULT: 0x80070542)

War es hilfreich?

Lösung

Der Benutzer, der Ihre Windows-Dienste laufen, muss einen Benutzer zum Imitieren zugelassen werden.

Es gibt ein Recht namens "Impersonate ein Client nach Authentifizierung"

http: // blogs .technet.com / askperf / Archiv / 2007/10/16 / wmi-Fehlersuche-Identitätswechsel-rights.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top