Как использовать поставщик членства ASP.NET
Поставщик членства в среде ASP.NET — это функция, которая позволяет разработчикам ASP.NET создавать веб-узлы с возможностью создания пользователями уникальных комбинаций имени пользователя и пароля. Эта функция позволяет любому пользователю создавать на узле учетную запись и при входе получать монопольный доступ к узлу и его службам. В этом заключается отличие от безопасности Windows, по условиям которой пользователи обязаны создавать ученые записи в домене Windows. Вместо этого любой пользователь, который предоставляет свои учетные данные (сочетание имени пользователя и пароля), может использовать узел и его службы.
Пример приложения см. в разделе Поставщик членства и ролей. Сведения об использовании функции поставщика ролей ASP.NET см. в разделе Как использовать поставщик ролей ASP.NET со службой.
Функция членства требует использования базы данных SQL Server для хранения сведений о пользователе. Эта функция также включает методы напоминания пользователю его пароля с помощью специального вопроса.
Разработчики Windows Communication Foundation (WCF) могут воспользоваться преимуществами этих функций в целях безопасности. Когда эти функции интегрированы в приложение WCF, пользователи должны предоставлять сочетание имя/пароль пользователя клиентскому приложению WCF. Для передачи данных службе WCF используйте привязку, которая поддерживает учетные данные (имя и пароль пользователя), например WSHttpBinding (в конфигурации, wsHttpBinding Element), и установите тип учетных данных клиента на UserName. В службе система безопасности WCF проверяет подлинность пользователя по имени и паролю пользователя и назначает роль, заданную ролью ASP.NET.
Примечание |
---|
В WCF не предусмотрены какие-либо методы для заполнения базы данных сочетаниями имени/пароля пользователя или другими сведениями о пользователе. |
Настройка поставщика участия
В элементе <system.web> файла Web.config создайте элемент <membership>.
В элементе <membership><providers> создайте элемент .
Добавьте элемент <providers> в качестве дочернего к элементу <clear />, чтобы записать коллекцию поставщиков.
В элементе <clear />< создайте элемент add>name со следующими атрибутами, для которых заданы соответствующие значения: type, connectionStringName, applicationName, enablePasswordRetrieval, enablePasswordReset, requiresQuestionAndAnswer, requiresUniqueEmail, passwordFormat и . Атрибут name используется далее в качестве значения в файле конфигурации. В следующем примере ему задается значение
SqlMembershipProvider
.В следующем примере демонстрируется раздел конфигурации.
<!-- 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>
Настройка системы безопасности службы на прием сочетания имя/пароль пользователя.
Добавьте элемент <bindings> в элемент <system.ServiceModel> файла конфигурации.
Добавьте элемент wsHttpBinding Element в раздел привязок. Дополнительные сведения создании элемента привязки WCF, см. Как задать привязку службы в конфигурации.
Задайте для атрибута mode элемента <security>Message значение .
Задайте для атрибута clientCredentialType элемента <message> значение UserName. В этом случае пара «имя пользователя и пароль» будет использоваться в качестве учетной записи клиента.
В следующем примере показан код конфигурации для привязки.
<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>
Настройка службы на использование поставщика участия
Добавьте элемент <behaviors> в качестве дочернего для элемента <system.serviceModel>.
Добавьте элемент serviceBehaviors section в элемент <behaviors>.
Добавьте элемент Behavior element и задайте соответствующее значение для атрибута name.
Добавьте элемент <serviceCredentials> Element<behavior в элемент >.
Добавьте элемент userNameAuthentication element в элемент <serviceCredentials>.
Задайте для атрибута userNamePasswordValidationMode значение MembershipProvider.
Примечание Если значение userNamePasswordValidationMode не задано, WCF использует проверку подлинности Windows вместо поставщика участия ASP.NET. Задайте для атрибута membershipProviderName значение "имя поставщика" (указывается при добавлении поставщика в первой процедуре данного раздела). В следующем примере показан фрагмент <serviceCredentials>, иллюстрирующий вышеуказанные действия.
<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
Пример
В следующем коде показана конфигурация службы, использующей функцию членства в ASP.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="Microsoft.Samples.GettingStarted.CalculatorService">
<endpoint address="https://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>
См. также
Задачи
Как использовать поставщик ролей ASP.NET со службой
Поставщик членства и ролей