2010-01-19 9 views
6

Ho un servizio che utilizza un "UserNamePasswordValidator" personalizzato e che deve salvare l'oggetto utente convalidato per poterlo recuperare successivamente nel servizio. Come posso fare questo? O come posso accedere alle credenziali dell'utente successivamente nel servizio?Come salvare l'oggetto utente in WCF

/Viktor

risposta

3

La risposta breve è che l'opzione più corretto è quello di creare un'istanza IPrincipal che rappresenta l'utente autenticato e metterlo su Thread.CurrentPrincipal.

Tutti i codici in esecuzione sullo stesso thread più avanti nel servizio saranno in grado di accedere all'utente autenticato tramite Thread.CurrentPrincipal.

Questo è il modo standard di trattare gli utenti autenticati in .NET (e quindi anche in WCF).

6

Non è così semplice. Il problema è che il UserNamePasswordValidator personalizzato viene chiamato prima di AuthorizationPolicy.Evaluate() e da qualche parte in mezzo, WCF inizializza Thread.CurrentPrincipal stesso. Ho provato a impostarlo all'interno del validatore della password ma non funziona, viene immediatamente danneggiato da WCF quando viene creato il principal iniziale. L'unico modo per farlo funzionare è se aspetto e imposti Thread.CurrentPrincipal nel metodo AuthorizationPolicy.Evaluate().

Mi piacerebbe sentire un guru di WCF spiegarlo perché vedo così tanti principianti di WCF che hanno lo stesso problema con questo e lo vedo come un difetto nel design della WCF.

Problemi correlati