Практическое руководство. Использование поставщика членства ASP.NET
Поставщик членства ASP.NET — это функция, которая позволяет разработчикам ASP.NET создавать веб-сайты, позволяющие пользователям создавать уникальные сочетания имен пользователей и паролей. Эта функция позволяет любому пользователю создавать на узле учетную запись и при входе получать монопольный доступ к узлу и его службам. В этом заключается отличие от безопасности Windows, по условиям которой пользователи обязаны создавать ученые записи в домене Windows. Вместо этого любой пользователь, предоставляющий свои учетные данные (сочетание имени пользователя и пароля), может использовать сайт и его службы.
Пример приложения см. в разделе "Членство и поставщик ролей". Сведения об использовании функции поставщика ролей ASP.NET см. в разделе "Практическое руководство. Использование поставщика ролей ASP.NET с помощью службы".
Возможность членства требует использования базы данных SQL Server для хранения сведений о пользователе. Эта возможность также включает методы напоминания пользователю его пароля с помощью специального вопроса.
Разработчики Windows Communication Foundation (WCF) могут воспользоваться этими функциями в целях безопасности. При интеграции с приложением WCF пользователи должны предоставить сочетание имени пользователя и пароля клиентскому приложению WCF. Чтобы передать данные в службу WCF, используйте привязку, которая поддерживает учетные данные пользователя и пароля, например WSHttpBinding (в конфигурации, <wsHttpBinding>) и задайте для клиента тип UserName
учетных данных. В службе безопасность WCF проверяет подлинность пользователя на основе имени пользователя и пароля, а также назначает роль, указанную ролью ASP.NET роли.
Примечание.
WCF не предоставляет методы для заполнения базы данных комбинациями имени пользователя и пароля или другими сведениями о пользователе.
Настройка поставщика членства
В файле конфигурации Web.config в элементе
<system.web>
создайте<membership>
элемент.В элементе
<membership>
<providers> создайте элемент<providers>
.В качестве дочернего
<providers>
элемента добавьте<clear />
элемент для очистки коллекции поставщиков.В элементе
<clear />
<add>
создайте элемент со следующими атрибутами, заданными для соответствующих значений:name
,enablePasswordRetrieval
enablePasswordReset
type
applicationName
requiresQuestionAndAnswer
connectionStringName
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>
Настройка системы безопасности службы на прием сочетания имя/пароль пользователя
В файле конфигурации в элементе system.serviceModel> добавьте< элемент bindings>.<
<Добавьте wsHttpBinding> в раздел привязок. Дополнительные сведения о создании элемента привязки 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>
Настройка службы на использование поставщика членства
Добавление элемента <поведения> в качестве дочернего
<system.serviceModel>
элемента<Добавьте поведение> и задайте
name
атрибут соответствующим значением.<Добавьте в элемент userNameAuthentication
<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="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>