Procedura: utilizzare una convalida di nome utente e password personalizzata
Per impostazione predefinita, quando per l'autenticazione vengono utilizzati un nome utente e una password, in Windows Communication Foundation (WCF) viene utilizzato Windows per convalidarli. WCF, tuttavia, consente l'utilizzo di schemi personalizzati di autenticazione di nome utente e password, noti come convalide. Per incorporare una convalida personalizzata di nome utente e password, creare una classe che deriva da UserNamePasswordValidator e configurarla.
Per un'applicazione di esempio, vedere UserNamePassword Validator.
Per creare una convalida di nome utente e password personalizzata
Creare una classe che deriva da UserNamePasswordValidator.
Implementare lo schema di autenticazione personalizzato eseguendo l'override del metodo Validate.
Non utilizzare il codice contenuto nell'esempio seguente, che esegue l'override del metodo Validate, in un ambiente di produzione. Sostituire il codice con lo schema di convalida di nome utente e password personalizzato, operazione che potrebbe comportare il recupero di coppie di nome utente e password da un database.
Affinché gli errori di autenticazione vengano restituiti al client, generare una classe FaultException nel metodo Validate.
Per configurare un servizio per l'utilizzo di una convalida di nome utente e password personalizzata
Configurare un'associazione che utilizza meccanismi di protezione a livello di messaggio su qualsiasi trasporto o meccanismi di protezione a livello di trasporto su HTTP(S).
Quando si utilizza la modalità di protezione dei messaggi, aggiungere una delle associazioni fornite dal sistema, ad esempio wsHttpBinding Element, oppure un elemento customBinding Element che supporta la protezione dei messaggi e il tipo di credenziale UserName.
Quando si utilizza la modalità di protezione a livello di trasporto su HTTP(S), aggiungere wsHttpBinding Element o <basicHttpBinding>, o un elemento customBinding Element che utilizza HTTP(S) e lo schema di autenticazione Basic.
Nota
Quando si utilizza .NET Framework versione 3.5 o versioni successive, è possibile utilizzare una convalida di nome utente e password personalizzata con protezione dei messaggi e del trasporto. Quando si utilizza .NET Framework 3.0 è possibile utilizzare solo una convalida di nome utente e password personalizzata con protezione dei messaggi.
Aggiungere un elemento <bindings> al file di configurazione, sotto l'elemento <system.ServiceModel>.
Aggiungere un elemento wsHttpBinding Element o <basicHttpBinding> alla sezione delle associazioni. Per ulteriori informazioni sulla creazione di un elemento di associazione WCF vedere Procedura: specificare un'associazione al servizio in configurazione.
Impostare l'attributo mode dell'elemento security element of wsHttpBinding o <security> of <basicHttpBinding> su Message, Transport, or TransportWithMessageCredential.
Impostare l'attributo clientCredentialType dell'elemento message element of wsHttpBinding o <transport> of <wsHttpBinding>.
Quando si utilizza la modalità di protezione dei messaggi, impostare l'attributo clientCredentialType dell'elemento message element of wsHttpBinding su UserName.
Quando si utilizza la modalità di protezione a livello di trasporto su HTTP(S), impostare l'attributo clientCredentialType dell'elemento <transport> of <wsHttpBinding> o <transport> of <basicHttpBinding> su Basic.Nota
Quando un servizio WCF è ospitato in Internet Information Services (IIS) utilizzando la protezione a livello di trasporto e la proprietà UserNamePasswordValidationMode è impostata su Custom, lo schema di autenticazione personalizzato utilizza un sottoinsieme dell'autenticazione di Windows. Questo avviene perchè in tale scenario, IIS esegue l'autenticazione di Windows prima di WCF richiamando l'autenticatore personalizzato.
Per ulteriori informazioni sulla creazione di un elemento di associazione WCF, vedere Procedura: specificare un'associazione al servizio in configurazione.
Nell'esempio seguente viene illustrato il codice di configurazione per l'associazione.
<system.serviceModel> <bindings> <wsHttpBinding> <binding name="Binding1"> <security mode="Message"> <message clientCredentialType="UserName" /> </security> </binding> </wsHttpBinding> </bindings> </system.serviceModel>
Configurare un comportamento che specifica che una convalida personalizzata di nome utente e password viene utilizzata per convalidare coppie di nome utente e password per i token di protezione UserNameSecurityToken in arrivo.
Aggiungere un elemento <behaviors> come figlio dell'elemento <system.serviceModel>.
Aggiungere una sezione serviceBehaviors section all'elemento <behaviors>.
Aggiungere un elemento <behavior> e impostare l'attributo name su un valore appropriato.
Aggiungere una sezione <serviceCredentials> Element all'elemento <behavior>.
Aggiungere un userNameAuthentication element all'<serviceCredentials> Element.
Impostare userNamePasswordValidationMode su Custom.
Nota
Se il valore userNamePasswordValidationMode non è impostato, in WCF viene utilizzata l'autenticazione Windows anziché la convalida personalizzata di nome utente e password.
Impostare customUserNamePasswordValidatorType sul tipo che rappresenta la convalida personalizzata di nome utente e password.
Nell'esempio seguente viene illustrato il frammento <serviceCredentials> fino a questo punto.
<serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.CalculatorService.CustomUserNameValidator, service" /> </serviceCredentials>
Esempio
Nel codice di esempio seguente viene dimostrato come creare una convalida personalizzata di nome utente e password. Non utilizzare il codice che esegue l'override del metodo Validate in un ambiente di produzione. Sostituire il codice con lo schema di convalida di nome utente e password personalizzato, operazione che potrebbe comportare il recupero di coppie di nome utente e password da un database.
Vedere anche
Attività
Procedura: utilizzare provider di appartenenza ASP.NET