Como: usar o provedor de associação do ASP.NET
O provedor de associação ASP.NET é um recurso que permite que desenvolvedores ASP.NET criem sites que permitem que os usuários criem combinações exclusivas de nome de usuário e senha. Com essa instalação, qualquer usuário pode estabelecer uma conta com o site e entrar para acesso exclusivo ao site e 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 nome de usuário/senha) pode usar o site e seus serviços.
Para um aplicativo de exemplo, consulte Associação e provedor de funções. Para obter informações sobre como usar o recurso ASP.NET provedor de funções, consulte Como usar o provedor de funções ASP.NET com um serviço.
O recurso de associação requer o uso de um banco de dados SQL Server para armazenar as informações do usuário. O recurso também inclui métodos para solicitar com uma pergunta todos os usuários que esqueceram sua senha.
Os desenvolvedores do WCF (Windows Communication Foundation) podem aproveitar esses recursos para fins de segurança. Quando integrados a um aplicativo WCF, os usuários precisam 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 dê suporte a credenciais de nome de usuário/senha, como WSHttpBinding o (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.
Observação
O 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 do usuário.
Para configurar o provedor de associação
No arquivo Web.config, sob o elemento
<system.web>
, crie um elemento<membership>
.Abaixo do elemento
<membership>
, crie um elemento<providers>
.Como um filho ao elemento
<providers>
, adicione um elemento<clear />
para liberar a coleção de provedores.Embaixo do elemento
<clear />
, crie um elemento<add>
com os seguintes atributos definidos como valores apropriados:name
,type
,connectionStringName
,applicationName
,enablePasswordRetrieval
,enablePasswordReset
,requiresQuestionAndAnswer
,requiresUniqueEmail
epasswordFormat
. O atributoname
é usado posteriormente como um valor no arquivo de configuração. O exemplo a seguir define-o 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 nome de usuário/senha
No arquivo de configuração, no elemento <system.serviceModel>, adicione um elemento <bindings>.
Adicione um <wsHttpBinding> à seção de associações. Para obter mais informações sobre como criar um elemento de associação WCF, consulte Como especificar uma associação de serviço na configuração.
Defina o atributo
mode
do elemento<security>
comoMessage
.Defina o atributo
clientCredentialType
do elemento<message>
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 associaçã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 um filho do elemento
<system.serviceModel>
, adicione um elemento de <comportamento>Adicione um <serviceBehaviors> ao elemento
<behaviors>
.Adicione um <behavior> e defina o atributo
name
com um valor apropriado.Adicione um <serviceCredentials> ao elemento
<behavior>
.Adicione um <userNameAuthentication> ao elemento
<serviceCredentials>
.Defina o atributo
userNamePasswordValidationMode
comoMembershipProvider
.Importante
Se o valor
userNamePasswordValidationMode
não estiver definido, o WCF usará autenticação do Windows em vez do provedor de associação ASP.NET.Defina o atributo
membershipProviderName
como o nome do provedor (especificado ao adicionar o provedor no primeiro procedimento neste tópico). O exemplo a seguir mostra o fragmento do<serviceCredentials>
para 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 de 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>