четверг, апреля 07, 2011

Настройка приложения Sharepoint 2010 для авторизации форм (FBA) с хранением данных в SQLServer

Для настройки приложения Sharepoint 2010 для работы с авторизацией форм FBA (forms based authentication) важно знать что приложение должно быть настроено для работы через Claims Based Authentication.

Самый простой вариант - при создании приложения указать Claims based [Авторизация на утверждениях] (по умолчанию приложение создается в режиме Basic authentication).
Если-же у вас уже имеется приложение для которого надо включить FBA вам придется конвертировать приложение. Сложного в этом ничего нет, но стоит помнить что конвертация НЕОБРАТИМА. 
Для конвертации приложения из Basic в Claims based вам необходимо открыть Powershell для Sharepoint 2010 с правами администратора и там выполнить команды:

$app=Get-SPWebApplication("http://site") 
$app.UseClaimsAuthentication = 1 
$app.Update() 
$app.ProvisionGlobally()

Теперь можно приступить к настройке базы данных. Для создания базы данных для хранения пользователей надо запустить мастер создания и регистрации базы данных пользователей командой:


c:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regsql.exe

В своем случае я указал имя БД SharepointAuthDB, и учетные данные пользователя от которого у меня работает Sharepoint для простоты настройки администратором домена/сервера, а так-же из-за стойкой неприязни к хранению имени пользователя и пароля доступа в строке подключения.  Для создания строки подключения нам надо запомнить имя сервера, имя БД, и способ авторизации пользователя.

Далее открываем Управление службами IIS и в настройках сервера  нажимаем на ConnectionStrings(Строки подключения) и там нажимаем на "Создать". В открывшемся диалоге вводим имя сервера,имя БД (SharepointAuthDB в моем случае) и способ авторизации пользователя которые вы указывали в мастере регистрации. Так-же необходимо проверить что данный пользователь имеет права dbo и public на базу с пользователями. Так-же вам надо указать имя строки подключения (я указал SqlAuthConnection) и запомнить его.

Далее нам необходимо модифицировать 3 файла web.config

  1. Web.config от приложения Sharepoint которые вы настраиваете для авторизации форм Обычно он расположен по адресу: C:\inetpub\wwwroot\wss\VirtualDirectories\80 (можно посмотреть в настройках узла)

        <roleManager defaultProvider="c" enabled="true" cacheRolesInCookie="false">
          <providers>
            <add name="c" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthRoleProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
            <add connectionStringName="SharepointAuthDB" applicationName="/" description="Stores and retrieves roles from SQL Server" name="FBARole" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
          </providers>
        </roleManager>
        <membership defaultProvider="i">
          <providers>
            <add name="i" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
            <add connectionStringName="SharepointAuthDB" passwordAttemptWindow="5" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" description="Stores and Retrieves membership data from SQL Server" name="FBA" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
          </providers>
        </membership>
  2. Файл web.config от SharePoint Central Administration Обычно он расположен по адресу: C:\inetpub\wwwroot\wss\VirtualDirectories\26719 (можно посмотреть в настройках узла)
    В этом файле после тега </SafeControls> добавить секцию
    <PeoplePickerWildcards>
    <clear />
    <add key="AspNetSqlMembershipProvider" value="%" />
    <add key="FBA" value="%" />
    <add key="LdapMembershipProvider" value="*"/>
    <add key="LdapRoleManager" value="*"/>
    </PeoplePickerWildcards>

    и перед тегом </system.web> добавить секцию:
    <roleManager defaultProvider="AspNetWindowsTokenRoleProvider" enabled="true" cacheRolesInCookie="false">
    <providers>
    <add connectionStringName="SharepointAuthDB" applicationName="/" description="Stores and retrieves roles from SQL Server" name="FBARole" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
    </roleManager>
    <membership defaultProvider="FBA">
    <providers>
    <add connectionStringName="SharepointAuthDB" passwordAttemptWindow="5" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" description="Stores and Retrieves membership data from SQL Server" name="FBA" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
    </membership>


  3. Файл web.config от Sharepoint Security Token Service (STS)Обычно он расположен по адресу: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\WebServices\SecurityToken В этот файл необходимо добавить секцию:


    <system.web>

    <roleManager defaultProvider="c" enabled="true" cacheRolesInCookie="false">

    <providers>

    <add name="c" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthRoleProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />

    <add connectionStringName="SharepointAuthDB" applicationName="/" description="Stores and retrieves roles from SQL Server" name="FBARole" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

    </providers>

    </roleManager>



    <membership defaultProvider="i">
    <providers>
    <add name="i" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
    <add connectionStringName="SharepointAuthDB" passwordAttemptWindow="5" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" description="Stores and Retrieves membership data from SQL Server" name="FBA" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
    </membership>
    </system.web>
Далее необходимо открыть приложение Sharepoint Central Administration  и нам в настройках приложения нажать "Поставщики проверки безопасности", выбрать необходимую зону и в настройках зоны включить галочку "Разрешить проверку подлинности на основе форм (FBA)".

Далее в поле "Имя поставщика контроля членства в ASP.NET" (membership provider) задать FBA , а в поле "Имя поставщика контроля членства в ASP.NET" (role provider) задать FBARole (если вы не меняли имя поставщиков в XML а указали как я написал). А так-же проверить что разрешен анонимный доступ (для обеспечения работоспособности сервиcов Sharepoint)

Нам осталось совсем немного. Для проверки корректности работы авторизации форм надо создать пользователей в базе данных. (ВНИМАНИЕ из-за особенностей настройки Membreship

Providers для Sharepoint 2010 управлять пользователями через стандартную оснастку IIS не получится, я могу посоветовать написать свой менеджер пользователей или воспользоваться программой MembershipSeeder)

Теперь осталось перезапустить IIS. Зайдти в Sharepoint Central Admin и в настройках приложения задать политику доступа для пользователей FBA.


2 комментария:

  1. Можно воспользоваться
    http://strepas.wordpress.com/2011/01/25/forms-based-authentication-utility-for-sharepoint-2010/

    и через IIS есть возможность управлять пользователями и ролями, но для этого нужно менять поставщиков по умолчанию. Однако смена поставщика по умолчанию приводит к тому, что сайт перестаёт воспринимать fba'шные имена. Поэтому после настройки пользователей и роле нужно возвращать дефаулты обратно. :)

    ОтветитьУдалить
  2. Именно из-за того-что при управлении пользователями и ролями через IIS приходиться менять поставщиков по умолчанию, для реального проекта, мною был написан простейший менеджер пользователей. Если кому надо могу подарить исходники - там все тривиально и просто.

    ОтветитьУдалить