Questo dipende interamente dall'associazione che si sta utilizzando e non esiste una risposta generale.
Ad esempio, se si utilizza il NetNamedPipeBinding e fare
myChannelFactory.Credentials.UserName.UserName = "username";
myChannelFactory.Credentials.UserName.Password = "password";
si sta sprecando il vostro tempo: il lato client di associazione non farà nulla con questi dati, non sarà nel messaggio, e ha vinto essere accessibile a tutti dal lato del servizio
Il binding consumerà questi dati solo se è configurato con opzioni di sicurezza che specificano l'utilizzo di credenziali nome utente/password. Tutti i collegamenti standard che lo fanno utilizzeranno le credenziali per l'autenticazione, i cui risultati verranno quindi visualizzati nel servizio tramite lo ServiceSecurityContext
come indicato da casperOne e non includeranno i dati della password.
Per supportare l'autenticazione, i dati devono essere trasportati da qualche parte nelle intestazioni dei messaggi. Esattamente dove e in che forma sarà di nuovo vincolante-dipendente. Non dare per scontato che li troverai sempre in operationContext.IncomingMessageHeaders[1]
.
MODIFICA: Potrebbe essere possibile creare un'associazione personalizzata che offre ciò che si sta cercando.
CustomBinding binding = new CustomBinding(...);
binding.Elements.Insert(1,
SecurityBindingElement.CreateUserNameOverTransportBindingElement());
Sul lato servizio, fornire una UserNamePasswordValidator
e configurare le credenziali in questo modo:
serviceHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode =
System.ServiceModel.Security.UserNamePasswordValidationMode.Custom;
servicehost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator =
new MyUserNamePasswordValidator();
Il nome utente e la password saranno poi consegnati al metodo di MyUserNamePasswordValidator
Validate
.
ATTENZIONE: questo non è un meccanismo di autenticazione sicuro a meno che non si utilizzi un trasporto sicuro, poiché le credenziali vengono inviate in chiaro nell'intestazione del messaggio.
Perché lo vuoi? Stai cercando di eseguire un'autenticazione aggiuntiva? – McKay