Domanda

Ho un servizio WCF ospitato in IIS 7 in piscina app predefinita in modalità integrata con accesso anonimo disattivato e l'autenticazione di Windows attivata.

ho messo il seguente attributo sull'attuazione metodo per la mia interfaccia.

[OperationBehavior(Impersonation = ImpersonationOption.Required)]

Se non fornire le credenziali di rete nella chiamata al mio servizio ottengo il comportamento previsto in quanto le seguenti condizioni:

ServiceSecurityContext.Current.WindowsIdentity.Name = myDomain \ myUser
ServiceSecurityContext.Current.PrimaryIdentity.Name = myDomain \ myUser
Thread.CurrentPrincipal.Identity.Name = myDomain \ myUser
Posso connettersi a un database su un sistema remoto utilizzando SSPI e l'autenticazione myDomain \ myUser.
WindowsIdentity.GetCurrent (). Name = myDomain \ myUser
Posso usare Thread.CurrentPrincipal.IsInRole () per verificare l'utente è in un ruolo.
Posso usare WindowsIdentity.GetCurrent (). Gruppi per recuperare un elenco di gruppi per l'utente.

Ma se fornire le credenziali di rete utilizzando il seguente:

var networkCredential = new NetworkCredential(user, pwd, dom);
base.ClientCredentials.Windows.ClientCredential = networkCredential;
base.ClientCredentials.Windows.AllowNtlm = true;      
base.ClientCredentials.Windows.AllowedImpersonationLevel 
          = System.Security.Principal.TokenImpersonationLevel.Delegation;

Poi tutto quanto sopra è lo stesso, tranne la connessione al database e due dei gruppi elencati sono diversi. La connessione al database è stato fatto utilizzando il login utente NT Authority \ Anonymous. Utilizzando i NetworkCredentials mette l'utente al gruppo NT Authority \ Network piuttosto che NT Authority \ Interactive e inoltre il gruppo locale viene rimosso.

Il mio obiettivo è quello di rendere la connessione al database utilizzando le credenziali passavano NetworkCredential, tutto il consiglio sarebbe apprezzato.

Holder Shane

È stato utile?

Soluzione

Suona come problematiche tipiche doppio hop.

sto indovinando nello scenario di lavoro che Kerberos si sta abituando di default che vi porterà un gettone delegazione sul server remoto.

Nel secondo scenario non sta usando Kerberos per l'utente fornito / passano e che non supporta ottenere un token delegazione.

L'unico altro modo per ottenere un gettone delegazione sul server remoto di essere a conoscenza di è quello di utilizzare l'autenticazione di base (con SSL), un dolore completo.

Per quanto riguarda le credenziali numero doppio hop

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