Ho due servizi wcf entrambi ospitati su IIS sulla stessa macchina. Il servizio A viene chiamato da un client e utilizza BasicHttpBinding
con sicurezza di trasporto e NTLM credentialtype
. Servizio A deve chiamare il servizio B che è anche ospitato su IIS ma utilizza WsHttpBinding
con sicurezza di trasporto e NTLM credentialtype
.Passa le credenziali da un servizio Wcf a un altro servizio Wcf
IIS è configurato per utilizzare l'autenticazione integrata di Windows.
Il primo tentativo ho ricevuto un messaggio 403 vietato:
System.ServiceModel.Security.MessageSecurityException : The HTTP request was forbidden with client authentication scheme 'Ntlm'.
System.Net.WebException: The remote server returned an error: (403) Forbidden.
Questo è normale, perché quando faccio una chiamata dal servizio di A al servizio di B l'identità del pool di applicazioni viene utilizzato.
Nel mio secondo tentativo, ho provato a impersonare la chiamata al servizio B, ma il problema è che tutto il codice nell'operazione viene eseguito sotto l'account chiamanti. Questo account non ha permessi ACL sul server e fornire queste autorizzazioni non è un'opzione. il seguente errore viene registrato:
System.IO.FileLoadException : Could not load file or assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The handle is invalid. (Exception from HRESULT: 0x80070006 (E_HANDLE))
Come potrei risolvere questo senza cambiare la sicurezza della ACL o l'identità del pool di applicazioni?