Практическое руководство. Использование поставщика членства 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 не предоставляет методы для заполнения базы данных комбинациями имени пользователя и пароля или другими сведениями о пользователе.

Настройка поставщика членства

  1. В файле конфигурации Web.config в элементе <system.web> создайте <membership> элемент.

  2. В элементе <membership><providers> создайте элемент<providers>.

  3. В качестве дочернего <providers> элемента добавьте <clear /> элемент для очистки коллекции поставщиков.

  4. В элементе <clear />><addсоздайте элемент со следующими атрибутами, заданными для соответствующих значений: name, enablePasswordRetrievalconnectionStringNametypeenablePasswordResetrequiresQuestionAndAnswerapplicationNamerequiresUniqueEmailи .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>
    

Настройка системы безопасности службы на прием сочетания имя/пароль пользователя

  1. В файле конфигурации в элементе system.serviceModel> добавьте< элемент bindings>.<

  2. <Добавьте wsHttpBinding> в раздел привязок. Дополнительные сведения о создании элемента привязки WCF см. в разделе "Практическое руководство. Указание привязки службы в конфигурации".

  3. Задайте атрибуту mode элемента <security> значение Message.

  4. Задайте атрибуту 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>
    

Настройка службы на использование поставщика членства

  1. Добавление элемента <поведения> в качестве дочернего <system.serviceModel> элемента

  2. Добавьте в элемент serviceBehaviors<>behaviors>.<

  3. <Добавьте поведение> и задайте name атрибут соответствующим значением.

  4. Добавьте в элемент serviceCredentials<>behavior>.<

  5. <Добавьте в элемент userNameAuthentication<serviceCredentials>>.

  6. Задайте для атрибута userNamePasswordValidationMode значение MembershipProvider.

    Внимание

    userNamePasswordValidationMode Если значение не задано, WCF использует проверка подлинности Windows вместо поставщика членства ASP.NET.

  7. Задайте для атрибута 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>

См. также