Настройка веб-сайта, использующего службы приложений (VB)

по Скотт Митчелл

Скачать код или скачать PDF

В ASP.NET версии 2,0 появился ряд служб приложений, которые являются частью платформа .NET Framework и служат набором стандартных блочных служб, которые можно использовать для добавления широких функциональных возможностей в веб-приложение. В этом учебнике рассматривается настройка веб-сайта в рабочей среде для использования служб приложений и устранение распространенных проблем с управлением учетными записями пользователей и ролями в рабочей среде.

Введение

В ASP.NET версии 2,0 появился ряд служб приложений, которые являются частью платформа .NET Framework и служат набором стандартных блочных служб, которые можно использовать для добавления широких функциональных возможностей в веб-приложение. В число служб приложений входят:

  • Членство — API для создания учетных записей пользователей и управления ими.
  • Роли — API для категоризации пользователей по группам.
  • Profile — API для хранения пользовательского содержимого, определяемого пользователем.
  • Схема сайта — API для определения логической структуры сайта в виде иерархии, которую затем можно отобразить с помощью элементов управления навигацией, таких как меню и панели навигации.
  • Персонализация — API для обслуживания предпочтений настройки, чаще всего используемый с экземплярами WebPart.
  • Мониторинг работоспособности — API для мониторинга производительности, безопасности, ошибок и других метрик работоспособности системы для работающего веб-приложения.

API-интерфейсы служб приложений не привязаны к определенной реализации. Вместо этого вы указываете службам приложений на использование определенного поставщика, и этот поставщик реализует службу с помощью определенной технологии. Наиболее часто используемые поставщики веб-приложений, размещенных в компании размещения в Интернете, — это поставщики, использующие реализацию базы данных SQL Server. Например, SqlMembershipProvider является поставщиком для API членства, который хранит сведения об учетной записи пользователя в Microsoft SQL Server базе данных.

Использование служб приложений и поставщиков SQL Server добавляет некоторые трудности при развертывании приложения. Для начинающих объекты базы данных служб приложений должны быть созданы должным образом как в базах данных разработки, так и в рабочей среде и соответствующим образом инициализированы. Существуют также важные параметры конфигурации, которые необходимо выполнить.

Note

API-интерфейсы служб приложений разрабатывались с использованием модели поставщика— шаблона разработки, который позволяет предоставлять сведения о реализации API во время выполнения. Платформа .NET Framework поставляется с несколькими поставщиками служб приложений, которые можно использовать, например SqlMembershipProvider SqlRoleProvider , и, которые являются поставщиками интерфейсов API членства и ролей, использующих реализацию SQL Server базы данных. Вы также можете создать и подключить настраиваемый поставщик. На самом деле веб-приложение "проверки книги" уже содержит настраиваемого поставщика для API карт узла ( ReviewSiteMapProvider ), который строит карту узла на основе данных в Genres Books таблицах и в базе данных.

В этом учебнике объясняется, как расширить веб-приложение "Рецензирование книги" для использования API членства и ролей. Затем выполняется развертывание веб-приложения, которое использует службы приложений с реализацией базы данных SQL Server, и завершается с помощью решения распространенных проблем, связанных с управлением учетными записями пользователей и ролями в рабочей среде.

Обновления для приложения "Рецензирование книг"

В течение последних нескольких учебников веб-приложение "Рецензирование книг" было обновлено с статического веб-сайта на динамическое, управляемое данными веб-приложение, дополненное набором страниц администрирования для управления жанрами и проверками. Однако этот раздел администрирования сейчас не защищен — любой пользователь, который знает (или догадать) URL-адрес страницы администрирования, может валтз и создавать, изменять и удалять рецензии на нашем сайте. Распространенным способом защиты определенных частей веб-сайта является реализация учетных записей пользователей, а затем использование правил авторизации URL-адресов для ограничения доступа к определенным пользователям или ролям. В этом руководстве веб-приложение для рецензирования книг, доступное для загрузки, поддерживает учетные записи пользователей и роли. В ней определена одна роль Admin, и только пользователи этой роли могут получить доступ к страницам администрирования.

Note

Я создал три учетные записи пользователей в веб-приложении рецензий книги: Скотт, Цзисунь и Алиса. Все три пользователя имеют одинаковый пароль: Password! Скотт и Цзисунь имеют роль администратора, а Алиса — нет. Страницы, не являющиеся администраторами сайта, по-прежнему доступны анонимным пользователям. То есть вам не нужно выполнять вход для посещения сайта, если вы не хотите администрировать его. в этом случае необходимо войти в систему от имени пользователя в роли администратора.

Главная страница обзоров приложений в книге была обновлена и включает другой пользовательский интерфейс для прошедших проверку подлинности и анонимных пользователей. Если анонимный пользователь посещает сайт, он видит ссылку для входа в правом верхнем углу. Прошедший проверку подлинности пользователь видит сообщение "Добро пожаловать, username!" и ссылку для выхода из нее. Кроме того, есть страница входа ( ~/Login.aspx ), которая содержит веб-элемент управления Login, предоставляющий пользовательский интерфейс и логику для проверки подлинности посетителя. Создавать новые учетные записи могут только администраторы. (Для создания и управления учетными записями пользователей в папке имеются страницы ~/Admin .)

Настройка интерфейсов API членства и ролей

Веб-приложение для рецензирования книг использует интерфейсы API членства и ролей для поддержки учетных записей пользователей и группирования этих пользователей в роли (а именно — роль администратора). SqlMembershipProvider SqlRoleProvider Используются классы поставщика и, так как необходимо хранить сведения об учетной записи и ролях в базе данных SQL Server.

Note

Этот учебник не предназначен для подробного изучения при настройке веб-приложения для поддержки интерфейсов API членства и ролей. Подробные сведения об этих API и действиях, которые необходимо предпринять для настройки веб-сайта для их использования, см. в руководствах по безопасности веб-сайтов.

Чтобы использовать службы приложений с SQL Server базой данных, необходимо сначала добавить объекты базы данных, используемые этими поставщиками, в базу данных, в которой будут храниться данные учетной записи пользователя и роли. Эти необходимые объекты базы данных включают в себя множество таблиц, представлений и хранимых процедур. Если не указано иное, SqlMembershipProvider SqlRoleProvider классы поставщика и используют базу данных SQL Server Express Edition с именем, ASPNETDB расположенную в App_Data папке Application s. Если такая база данных не существует, она автоматически создается с необходимыми объектами базы данных поставщиками во время выполнения.

Возможно, и, как правило, идеально подходят для создания объектов базы данных служб приложений в той же базе данных, где хранятся данные конкретного приложения. Платформа .NET Framework поставляется с инструментом с именем aspnet_regsql.exe , устанавливающим объекты базы данных в указанной базе данных. Я восиспользовал это средство для добавления этих объектов в Reviews.mdf базу данных в App_Data папке (база данных разработки). Мы посмотрим, как использовать это средство далее в этом учебнике, когда мы добавим эти объекты в рабочую базу данных.

При добавлении объектов базы данных служб приложений в базу данных, отличную от ASPNETDB , потребуется настроить SqlMembershipProvider SqlRoleProvider конфигурации классов и, чтобы они использовали соответствующую базу данных. Чтобы настроить поставщик членства, добавьте < > элемент членства в <system.web> раздел в Web.config ; для настройки поставщика ролей используйте < > элемент roleManager . Следующий фрагмент кода взят из приложения "проверки книги" Web.config и показывает параметры настройки для интерфейсов API членства и ролей. Обратите внимание, что обе регистрируют новый поставщик — ReviewMembership и ReviewRole используют SqlMembershipProvider поставщики и SqlRoleProvider соответственно.

<configuration>
    <system.web>
        ...

        <membership defaultProvider="ReviewMembership">
            <providers>
                <clear />

                <add type="System.Web.Security.SqlMembershipProvider" 
                     name="ReviewMembership" 
                     connectionStringName="ReviewsConnectionString" 
                     applicationName="BookReviews" />
            </providers>
        </membership>

        <roleManager enabled="true" defaultProvider="ReviewRole">
            <providers>
                <clear />

                <add type="System.Web.Security.SqlRoleProvider" 
                     name="ReviewRole" 
                     connectionStringName="ReviewsConnectionString" 
                     applicationName="BookReviews" />
            </providers>
        </roleManager>

        ...
    </system.web>
</configuration>

Web.configЭлемент File s <authentication> также настроен для поддержки проверки подлинности на основе форм.

<configuration>
    <system.web>
        ...

        <authentication mode="Forms" />

        ...
    </system.web>
</configuration>

Ограничение доступа к страницам администрирования

ASP.NET упрощает предоставление или запрет доступа к определенному файлу или папке пользователю или роли с помощью функции авторизации по URL-адресу . (Мы вкратце рассмотрели авторизацию по URL-адресу в основных различиях между IIS и ASP.NET Development Serverным руководством и увидели, как службы iis и ASP.NET Development Server применяют правила авторизации URL-адресов иначе для статического и динамического содержимого.) Так как мы хотим запретить доступ к ~/Admin папке, за исключением пользователей в роли администратора, необходимо добавить правила авторизации URL-адресов в эту папку. В частности, правила авторизации URL-адресов должны разрешать пользователям в роли администратора и запрещать всех других пользователей. Это достигается путем добавления Web.config файла в ~/Admin папку со следующим содержимым:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <authorization>
            <allow roles="Admin" />
            <deny users="*" />
        </authorization>
    </system.web>
</configuration>

Дополнительные сведения о функции авторизации URL-адресов ASP.NET s и об их использовании для написания правил авторизации для пользователей и ролей см. в руководствах по безопасности веб-сайтов, а также в руководствах по авторизации и авторизации на основе ролей .

Развертывание веб-приложения, использующего Службы приложений

При развертывании веб-сайта, использующего службы приложений, и поставщика, хранящего сведения о службах приложений в базе данных, необходимо, чтобы объекты базы данных, необходимые для служб приложений, создавались в рабочей базе данных. Изначально Рабочая база данных не содержит этих объектов, поэтому при первом развертывании приложения (или при первом развертывании в первый раз после добавления служб приложений) необходимо выполнить дополнительные действия, чтобы получить эти объекты базы данных в рабочей базе данных.

Другая проблема может возникнуть при развертывании веб-сайта, использующего службы приложений, если планируется репликация учетных записей пользователей, созданных в среде разработки, в рабочую среду. В зависимости от конфигурации членства и ролей возможно, что даже если вы успешно скопировали учетные записи пользователей, созданные в среде разработки, в рабочую базу данных, эти пользователи не смогут войти в веб-приложение в рабочем режиме. Мы рассмотрим причину этой проблемы и обсудим, как предотвратить ее возникновение.

ASP.NET поставляется с удобным средством администрирования веб-сайтов (WSAT) , которое можно запустить из Visual Studio и позволяет управлять учетной записью пользователя, ролями и правилами авторизации через веб-интерфейс. К сожалению, WSAT работает только для локальных веб-сайтов, т. е. он не может использоваться для удаленного управления учетными записями пользователей, ролями и правилами авторизации для веб-приложения в рабочей среде. Мы рассмотрим различные способы реализации поведения, похожего на WSAT, на рабочем веб-сайте.

Добавление объектов базы данных с помощью ASPNET _regsql.exe

В учебнике развертывание базы данных было показано, как скопировать таблицы и данные из базы данных разработки в рабочую базу данных, и эти методы можно использовать для копирования объектов базы данных служб приложений в рабочую базу данных. Другой вариант — aspnet_regsql.exe средство, которое добавляет или удаляет объекты базы данных служб приложений из базы данных.

Note

aspnet_regsql.exeСредство создает объекты базы данных в указанной базе данных. Он не переносит данные из базы данных разработки в рабочую базу данных. Если вы хотите скопировать учетную запись пользователя и сведения о ролях в базу данных разработки в рабочую базу данных, используйте методы, описанные в учебнике развертывание базы данных .

Давайте посмотрим, как добавить объекты базы данных в рабочую базу данных с помощью aspnet_regsql.exe средства. Начните с открытия проводника Windows и перехода к каталогу платформа .NET Framework версии 2,0 на компьютере% WINDIR% \ Microsoft. NET\Framework\v2.0.50727. Вы должны найти это aspnet_regsql.exe средство. Это средство можно использовать из командной строки, но оно также включает графический пользовательский интерфейс. Дважды щелкните файл, aspnet_regsql.exe чтобы запустить его графический компонент.

Средство запускается, отображая экран-заставку, объясняющий его назначение. Нажмите кнопку Далее, чтобы перейти к экрану "Выбор параметра установки", который показан на рис. 1. Здесь можно добавить объекты базы данных служб приложений или удалить их из базы данных. Так как нам нужно добавить эти объекты в рабочую базу данных, выберите параметр "настроить SQL Server для служб приложений" и нажмите кнопку "Далее".

Выберите настройку SQL Server для Службы приложений

Рис. 1. Настройка SQL Server для службы приложений (щелкните, чтобы просмотреть изображение с полным размером)

На экране "Выбор сервера и базы данных" запрашиваются сведения для подключения к базе данных. Введите сервер базы данных, учетные данные безопасности и имя базы данных, предоставленное вашей компанией для размещения веб-сайтов, и нажмите кнопку Далее.

Note

После ввода сервера базы данных и учетных данных может возникнуть ошибка при развертывании раскрывающегося списка База данных. aspnet_regsql.exeСредство запрашивает sysdatabases системную таблицу для получения списка баз данных на сервере, но некоторые компании размещения веб-узлов заблокировали свои серверы баз данных, чтобы эти сведения не были общедоступными. При возникновении этой ошибки можно ввести имя базы данных непосредственно в раскрывающемся списке.

Предоставление средства с информацией о подключении к базе данных

Рис. 2. предоставление средства с информацией о соединении с базой данных (щелкните, чтобы просмотреть изображение с полным размером)

На следующем экране приведены сводные сведения о действиях, которые необходимо выполнить, а именно о том, что объекты базы данных служб приложений будут добавлены в указанную базу данных. Нажмите кнопку Далее, чтобы завершить это действие. Через несколько секунд появится окончательный экран, пометив, что объекты базы данных были добавлены (см. рис. 3).

Загрузоч! Службы приложений объекты базы данных были добавлены в рабочую базу данных

Рис. 3. успешное завершение! Службы приложений объекты базы данных были добавлены в рабочую базу данных (щелкните, чтобы просмотреть изображение с полным размером).

Чтобы убедиться, что объекты базы данных служб приложений были успешно добавлены в рабочую базу данных, откройте SQL Server Management Studio и подключитесь к рабочей базе данных. Как показано на рис. 4, вы увидите таблицы базы данных служб приложений в базе данных,,, aspnet_Applications aspnet_Membership aspnet_Users и т. д.

Убедитесь, что объекты базы данных были добавлены в рабочую базу данных.

Рис. 4. Убедитесь, что объекты базы данных были добавлены в рабочую базу данных (щелкните, чтобы просмотреть изображение с полным размером)

Это средство потребуется использовать только aspnet_regsql.exe при первом развертывании веб-приложения или в первый раз после начала работы со службами приложений. После того как эти объекты базы данных находятся в рабочей базе данных, их не нужно повторно добавлять или изменять.

Копирование учетных записей пользователей из разработки в рабочую среду

При использовании SqlMembershipProvider SqlRoleProvider классов поставщиков и для хранения сведений о службах приложений в базе данных SQL Server данные учетной записи пользователя и роли хранятся в различных таблицах базы данных, включая aspnet_Users ,, aspnet_Membership aspnet_Roles и aspnet_UsersInRoles , среди прочего. Если во время разработки вы создаете учетные записи пользователей в среде разработки, эти учетные записи пользователей можно реплицировать в рабочую среду, скопировав соответствующие записи из соответствующих таблиц базы данных. Если вы использовали мастер публикации баз данных для развертывания объектов базы данных служб приложений, возможно, вы также выбрали копирование записей, что приведет к тому, что учетные записи пользователей, созданные в разработке, также будут находиться в рабочей среде. Но в зависимости от параметров конфигурации может оказаться, что пользователи, учетные записи которых были созданы в процессе разработки и скопированы в рабочую среду, не могут войти с рабочего веб-сайта. Что это дает?

SqlMembershipProvider SqlRoleProvider Классы поставщиков и были спроектированы таким образом, что одна база данных может служить хранилищем пользователей для нескольких приложений, где каждое приложение теоретически может иметь пользователей с перекрывающимися именами пользователей и ролями с тем же именем. Чтобы обеспечить такую гибкость, база данных хранит список приложений в aspnet_Applications таблице, и каждый пользователь связан с одним из этих приложений. В частности, aspnet_Users таблица содержит ApplicationId столбец, связывающий каждого пользователя с записью в aspnet_Applications таблице.

В дополнение к ApplicationId столбцу aspnet_Applications Таблица также содержит ApplicationName столбец, который предоставляет более удобное для человека имя приложения. Когда веб-сайт пытается работать с учетной записью пользователя, например проверку учетных данных пользователя на странице входа, он должен сообщить SqlMembershipProvider классу, с каким приложением следует работать. Обычно это делается путем указания имени приложения, а это значение берется из конфигурации поставщика в, в Web.config частности через applicationName атрибут.

Но что произойдет, если applicationName атрибут не указан в параметре Web.config ? В этом случае система членства использует корневой путь приложения в качестве applicationName значения. Если applicationName атрибут не задан явным образом в Web.config , то существует вероятность того, что среда разработки и Рабочая среда используют другой корень приложения и, следовательно, будут связаны с разными именами приложений в службах приложений. В случае такого несоответствия эти пользователи, созданные в среде разработки, будут иметь ApplicationId значение, не совпадающее со ApplicationId значением рабочей среды. В итоге эти пользователи не смогут войти в систему.

Note

Если в этой ситуации вы обнаружите, что учетные записи пользователей скопированы в рабочую среду с несоответствующим ApplicationId значением, можно написать запрос для обновления этих неверных ApplicationId значений в ApplicationId используемом в рабочей среде. После обновления пользователи, учетные записи которых были созданы в среде разработки, теперь смогут входить в веб-приложение в рабочей области.

Хорошая новость состоит в том, что существует простой шаг, который можно предпринять, чтобы убедиться в том, что в двух средах ApplicationId applicationName Web.config для всех поставщиков служб приложений используется атрибут в явном виде. Я явно присвоить applicationName атрибуту значение «букревиевс» <membership> в <roleManager> элементах и, как показано в этом фрагменте кода Web.config .

<membership defaultProvider="ReviewMembership">
    <providers>
        <clear />

        <add type="System.Web.Security.SqlMembershipProvider" 
             name="ReviewMembership" 
             connectionStringName="ReviewsConnectionString" 
             applicationName="BookReviews" />
    </providers>
</membership>

Дополнительные сведения о настройке applicationName атрибута и его обосновании см. в записи блога Скотта Гатри ( s. при настройке членства ASP.NET и других поставщиков всегда задавайте свойство ApplicationName.

Управление учетными записями пользователей в рабочей среде

Средство администрирования веб-сайта ASP.NET (WSAT) упрощает создание учетных записей пользователей и управление ими, определение и применение ролей, а также написание правил авторизации на основе пользователей и ролей. Вы можете запустить WSAT из Visual Studio, перейдя к обозреватель решений и щелкнув значок конфигурации ASP.NET или перейдя к меню веб-сайт или проект и выбрав пункт меню ASP.NET Configuration. К сожалению, WSAT может работать только с локальными веб-сайтами. Таким образом, нельзя использовать WSAT на рабочей станции для управления веб-сайтом в рабочей среде.

Хорошая новость состоит в том, что все функции, предоставляемые WSAT, доступны программно через интерфейсы API членства и ролей. Кроме того, многие экраны WSAT используют стандартные элементы управления, связанные с входом ASP.NET. Вкратце, вы можете добавить на веб-сайт страницы ASP.NET, которые предлагают необходимые возможности управления.

Вспомним, что в предыдущем учебнике веб-приложение "Рецензирование книг" было добавлено в ~/Admin папку, а в этой папке настроено разрешение только пользователям с ролью администратора. Я добавил в эту папку страницу с именем, CreateAccount.aspx из которой администратор может создать новую учетную запись пользователя. На этой странице используется элемент управления CreateUserWizard для вывода пользовательского интерфейса и серверной логики для создания новой учетной записи пользователя. Что еще больше, я настроил элемент управления, включив в него флажок, запрашивающий, следует ли добавить нового пользователя к роли администратора (см. рис. 5). С небольшой скоростью работы можно создать пользовательский набор страниц, реализующих задачи, связанные с управлением пользователями и ролями, которые в противном случае были бы предоставлены WSAT.

Note

Дополнительные сведения об использовании API членства и ролей вместе с веб-элементами управления ASP.NET для входа в систему см. в руководствах по безопасности веб-сайтов. Дополнительные сведения о настройке элемента управления CreateUserWizard см. в статьях Создание учетных записей пользователей и сохранение дополнительных руководств по работе с данными о пользователях , а также в статье Ерич Петерсон s Настройка элемента управления CreateUserWizard.

Администраторы могут создавать новые учетные записи пользователей

Рис. 5. Администраторы могут создавать новые учетные записи пользователей (щелкните, чтобы просмотреть изображение с полным размером)

Если вам нужна полная функциональность WSAT, в которой вы создаете собственное средство администрирования веб-сайтов, в котором автор "Клем" познакомится с процессом создания пользовательского инструмента, похожего на WSAT. "+ +" Использует исходный код приложения (в C#) и предоставляет пошаговые инструкции по его добавлению на размещенный веб-сайт.

Сводка

При развертывании веб-приложения, использующего реализацию базы данных служб приложений, необходимо сначала убедиться, что в рабочей базе данных есть необходимые объекты базы данных. Эти объекты можно добавить с помощью методик, описанных в учебнике развертывание базы данных . Кроме того, можно использовать aspnet_regsql.exe средство, как было показано в этом руководстве. Другие проблемы, с которыми мы затронули центр синхронизации имени приложения, используемого в средах разработки и рабочей среды (это важно, если требуется, чтобы пользователи и роли, созданные в среде разработки, были действительны в рабочей среде) и методы управления пользователями и ролями в рабочей среды.

Поздравляем с программированием!

Дополнительные материалы

Дополнительные сведения о разделах, обсуждаемых в этом руководстве, см. в следующих ресурсах: