Domanda

Ho bisogno di aiuto su WCF e l'autorizzazione. Attualmente ho un cliente che chiama oggetto i servizi remoti come .NET ospitato in un servizio di Windows, e che sta chiamando un servizio WCF (con wsHttpBinding). Il servizio WCF è utilizzando l'autenticazione di Windows con sicurezza basata messaggio.

Il servizio di Windows è in esecuzione con un account speciale. Una volta che una chiamata cliente arriva l'oggetto .NET Remoting il Thread.CurrentPrincipal viene impostata al capitale fornito dal cliente, in modo che tutte le azioni vengono eseguite con le credenziali dal client. Nessun problema finora, ora ecco che arriva il mio problema attuale: Il servizio WCF dovrebbe essere chiamato con le credenziali utente del client. Afaik WCF utilizza il WindowsIdentity.GetCurrent per creare l'informazione di autorizzazione per la chiamata. Come Thread.CurrentPrincipal detiene l'identità che voglio utilizzare per la chiamata, ho pensato (hread.CurrentPrincipal.Identity come WindowsIdentity) .Impersonate () fa il lavoro.

Ma ora mi sto invece di un'eccezione di sicurezza WCF questa eccezione: System.ComponentModel.Win32Exception: Nessun credenziali sono disponibili nel pacchetto sicurezza

Callstack:    a System.IdentityModel.SspiWrapper.AcquireCredentialsHandle (pacchetto String, CredentialUse intento, AuthIdentityEx & AuthData)    a System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle (set di corde, delle credenziali NetworkCredential, booleano isServer, String [] additionalPackages)    a System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle (SBE SecurityBindingElement, ClientCredentials ClientCredentials)    a System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle (SecurityBindingElement SBE, contesto BindingContext)    a System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.OnOpening ()    a System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpening ()    a System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout)    a System.ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open (TimeSpan timeout)    a System.ServiceModel.Security.SecurityUtils.OpenTokenProviderIfRequired (SecurityTokenProvider tokenProvider, TimeSpan timeout)    a System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen (TimeSpan timeout)    a System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout)    a System.ServiceModel.Channels.ServiceChannel.OnOpen (TimeSpan timeout)    a System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout)    a System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call (canale ServiceChannel, TimeSpan timeout)    a System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce (TimeSpan timeout, CallOnceManager cascata)    a System.ServiceModel.Channels.ServiceChannel.EnsureOpened (TimeSpan timeout)    a System.ServiceModel.Channels.ServiceChannel.Call (azione String, senso unico booleana, il funzionamento ProxyOperationRuntime, Object [] ins, Object [] out, TimeSpan timeout)    a System.ServiceModel.Channels.ServiceChannel.Call (azione String, senso unico booleana, il funzionamento ProxyOperationRuntime, Object [] ins, Object [] out)    a System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, operazione ProxyOperationRuntime)    a System.ServiceModel.Channels.ServiceChannelProxy.Invoke (messaggio IMessage)

thx per qualsiasi aiuto Martin

EDIT: ho fatto un errore che conduce in questa eccezione, perché ho dimenticato di creare il ChannelFactory dopo la rappresentazione, ma ora ho un'altra eccezione, in cui non ho veramente sicuro di come trattare con essa: System.IO.FileLoadException: Impossibile caricare il file o l'assembly 'System.IdentityModel.Selectors, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' o una delle sue dipendenze. O un livello di rappresentazione richiesto non è stato fornito, o la rappresentazione fornitail livello non è valido. (Eccezione da HRESULT: 0x80070542)

È stato utile?

Soluzione

L'utente che il servizio di Windows è in esecuzione come, deve essere consentito di rappresentare un utente.

C'è un diritto chiamato "Rappresenta un client dopo l'autenticazione"

http: // blog .technet.com / askperf / archive / 2007/10/16 / WMI risoluzione dei problemi-rappresentazione-rights.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top