Procedimiento para usar el proveedor de pertenencia de ASP.NET
El proveedor de pertenencia de ASP.NET es una característica que permite a los programadores de ASP.NET crear sitios web que permiten a los usuarios crear combinaciones únicas de nombre de usuario y contraseña. Con esta función, cualquier usuario puede establecer una cuenta en el sitio e iniciar sesión para obtener acceso exclusivo al sitio y a sus servicios. Esto contrasta con la seguridad de Windows, que exige a los usuarios que tengan cuentas en un dominio de Windows. En su lugar, cualquier usuario que proporcione sus credenciales (la combinación de nombre de usuario/contraseña) puede utilizar el sitio y sus servicios.
Para una aplicación de ejemplo, consulte Proveedor de pertenencia y roles. Para obtener información sobre el uso de la característica de proveedor de roles ASP.NET, consulte Procedimiento para usar el proveedor de roles ASP.NET con un servicio.
La característica de pertenencia requiere el uso de una base de datos de SQL Server para almacenar la información de usuario. La característica también incluye métodos para realizar una pregunta a cualquier usuario que haya olvidado su contraseña.
Los programadores de Windows Communication Foundation (WCF) se pueden aprovechar de estas características con fines de aumento de la seguridad. Cuando se integran en una aplicación WCF, los usuarios deben proporcionar una combinación de nombre de usuario y contraseña a la aplicación cliente de WCF. Para transferir los datos al servicio WCF, use un enlace que admita credenciales de nombre de usuario/contraseña, como el WSHttpBinding (en configuración, el <wsHttpBinding>) y establezca el tipo de credenciales de cliente en UserName
. En el servicio, la seguridad de WCF autentica al usuario en función del nombre de usuario y contraseña y también asigna el rol especificado por el rol ASP.NET.
Nota
WCF no proporciona métodos para rellenar la base de datos con combinaciones de nombre de usuario/contraseña u otra información de usuario.
Para configurar el proveedor de pertenencia
En el archivo Web.config, en el elemento
<system.web>
, cree un elemento<membership>
.Bajo el elemento
<membership>
, cree un elemento<providers>
.Como elemento secundario del elemento
<providers>
, agregue un elemento<clear />
para vaciar la colección de proveedores.Bajo el elemento
<clear />
, cree un elemento<add>
con los siguientes atributos establecidos en los valores adecuados:name
,type
,connectionStringName
,applicationName
,enablePasswordRetrieval
,enablePasswordReset
,requiresQuestionAndAnswer
,requiresUniqueEmail
ypasswordFormat
. El atributoname
se utiliza más adelante como un valor en el archivo de configuración. El siguiente ejemplo lo define enSqlMembershipProvider
.En el ejemplo siguiente se muestra la sección de configuración.
<!-- Configure the Sql Membership Provider --> <membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15"> <providers> <clear /> <add name="SqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlConn" applicationName="MembershipAndRoleProviderSample" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" /> </providers> </membership>
Para configurar la seguridad de servicio con el fin de que acepte la combinación de nombre de usuario y contraseña
En el archivo de configuración, en el elemento < system.serviceModel>, agregue un elemento <bindings>.
Agregue un <wsHttpBinding> a la sección de enlaces. Para obtener más información sobre cómo crear un elemento de enlace WCF, consulte Procedimiento para especificar un enlace de servicio en la configuración.
Establezca el atributo
mode
del elemento<security>
enMessage
:Establezca el atributo
clientCredentialType
del elemento<message>
enUserName
. Esto especifica que un par de nombre de usuario y contraseña se utilizará como credencial del cliente.El siguiente ejemplo muestra el código de configuración para el enlace.
<system.serviceModel> <bindings> <wsHttpBinding> <!-- Set up a binding that uses UserName as the client credential type --> <binding name="MembershipBinding"> <security mode ="Message"> <message clientCredentialType ="UserName"/> </security> </binding> </wsHttpBinding> </bindings> </system.serviceModel>
Para configurar un servicio para que utilice el proveedor de pertenencia
Como elemento secundario del elemento
<system.serviceModel>
, agregue un elemento <behaviors>.Agregue un elemento <serviceBehaviors> al elemento
<behaviors>
.Agregue un elemento <behavior> y establezca el atributo
name
en un valor adecuado.Agregue un elemento <serviceCredentials> al elemento
<behavior>
.Agregue un elemento <userNameAuthentication> al elemento
<serviceCredentials>
.Defina el atributo
userNamePasswordValidationMode
aMembershipProvider
.Importante
Si no se establece el valor
userNamePasswordValidationMode
, WCF utiliza la autenticación de Windows en lugar del proveedor de pertenencia de ASP.NET.Establezca el atributo
membershipProviderName
en el nombre del proveedor (especificado al agregar el proveedor en el primer procedimiento de este tema). El ejemplo siguiente muestra el fragmento<serviceCredentials>
en este punto.<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
Ejemplo
El siguiente código muestra la configuración para un servicio que utiliza la característica de pertenencia de ASP.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="Microsoft.Samples.GettingStarted.CalculatorService">
<endpoint address="http://microsoft.com/WCFservices/Calculator"
binding="wsHttpBinding" bindingConfiguration="MembershipBinding"
name="ASPmemberUserName" contract="Microsoft.Samples.GettingStarted.ICalculator" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="SqlMembershipProvider" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="MembershipBinding">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
</configuration>