Como: Usar o provedor de associação ASP.NET
O provedor de associação ASP.NET é um recurso que permite que os desenvolvedores de ASP.NET criem sites que permitem que os usuários criem combinações exclusivas de nome de usuário e senha. Com esta facilidade, qualquer utilizador pode estabelecer uma conta no site, e iniciar sessão para acesso exclusivo ao site e aos seus serviços. Isso contrasta com a segurança do Windows, que exige que os usuários tenham contas em um domínio do Windows. Em vez disso, qualquer usuário que forneça suas credenciais (a combinação de nome de usuário e senha) pode usar o site e seus serviços.
Para obter um aplicativo de exemplo, consulte Provedor de associação e função. Para obter informações sobre como usar o recurso de provedor de função ASP.NET, consulte Como usar o provedor de função ASP.NET com um serviço.
O recurso de associação requer o uso de um banco de dados do SQL Server para armazenar as informações do usuário. O recurso também inclui métodos para solicitar com uma pergunta qualquer usuário que tenha esquecido sua senha.
Os desenvolvedores do Windows Communication Foundation (WCF) podem aproveitar esses recursos para fins de segurança. Quando integrado em um aplicativo WCF, os usuários devem fornecer uma combinação de nome de usuário/senha para o aplicativo cliente WCF. Para transferir os dados para o serviço WCF, use uma associação que ofereça suporte a credenciais de nome de usuário/senha, como o WSHttpBinding (na configuração, o <wsHttpBinding>) e defina o tipo de credencial do cliente como UserName
. No serviço, a segurança do WCF autentica o usuário com base no nome de usuário e na senha e também atribui a função especificada pela função ASP.NET.
Nota
WCF não fornece métodos para preencher o banco de dados com combinações de nome de usuário/senha ou outras informações de usuário.
Para configurar o provedor de associação
No arquivo Web.config, sob o
<system.web>
elemento , crie um<membership>
elemento .Sob o
<membership>
elemento , crie um<providers>
elemento .Como filho ao
<providers>
elemento , adicione um<clear />
elemento para liberar a coleção de provedores.Sob o
<clear />
elemento , crie um<add>
elemento com os seguintes atributos definidos para valores apropriados:name
,type
,connectionStringName
,applicationName
,enablePasswordRetrieval
,enablePasswordReset
,requiresQuestionAndAnswer
,requiresUniqueEmail
, epasswordFormat
. Oname
atributo é usado posteriormente como um valor no arquivo de configuração. O exemplo a seguir o define comoSqlMembershipProvider
.O exemplo a seguir mostra a seção de configuração.
<!-- 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 a segurança do serviço para aceitar a combinação de nome de usuário/senha
No arquivo de configuração, sob o elemento system.serviceModel>, adicione um <elemento bindings>.<
Adicione um <wsHttpBinding> à seção bindings. Para obter mais informações sobre como criar um elemento de vinculação WCF, consulte Como especificar uma vinculação de serviço na configuração.
Defina o
mode
<security>
atributo do elemento comoMessage
.Defina o
clientCredentialType
<message>
atributo do elemento comoUserName
. Isso especifica que um par de nome de usuário/senha será usado como credencial do cliente.O exemplo a seguir mostra o código de configuração para a ligação.
<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 um serviço para usar o provedor de associação
Como filho ao
<system.serviceModel>
elemento , adicione um <elemento behaviors>Adicione um <serviceBehaviors> ao
<behaviors>
elemento .Adicione um <comportamento> e defina o
name
atributo como um valor apropriado.Adicione um <serviceCredentials> ao
<behavior>
elemento .Adicione um <userNameAuthentication> ao
<serviceCredentials>
elemento .Defina o
userNamePasswordValidationMode
atributo comoMembershipProvider
.Importante
Se o valor não estiver definido, o
userNamePasswordValidationMode
WCF usará a autenticação do Windows em vez do provedor de associação ASP.NET.Defina o
membershipProviderName
atributo como o nome do provedor (especificado ao adicionar o provedor no primeiro procedimento deste tópico). O exemplo a seguir mostra o fragmento<serviceCredentials>
até este ponto.<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
Exemplo
O código a seguir mostra a configuração para um serviço que usa o recurso de associação 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>