Авторизация Membership пользователей сквозь сайты с разными суб доменами. Membership Cross Sub Domain Authorization.
Задача: Есть несколько серверов, на которых размещены сайты с доменами вида:
domain.ru, sub1.domain.ru, sub2.domain.ru, sub3.domain.ru и тп. То есть эти сайты объединяет единый корневой домен.
Необходимо настроить авторизацию на этих сайтах таким образом, чтобы пользователь осуществляя вход на одном сайте, автоматически считался авторизованным на другом.
Авторизация на сайтах реализована через Membership Provider. Пользователи хранятся в одной базе данных.
Решение:
Конечно же для решения этой задачи не обойтись без Cookies. Поэтому первое, что мы сделаем - это в web.config включим использование Cookie.
Здесь небольшое отступление. Для того, чтобы Cookie читалась на всех суб доменах верхнего уровня необходимо в качестве домена для Cookie указать корневой домен с точкой (для нашего примера .domain.ru)
Смотрим как сделать эти действия с помощью одной строчки в web.config
Следующий шаг - это конфигурация Membership Provider. Во-первых, необходимо указать тип хеширования hashAlgorithmType="SHA1" и использовать единый applicationName="applicationName"
Завершающий этап. Добавляем в web.config machineKey одинаковый для всех сайтов. Делаем это для того, чтобы авторизационную Cookie можно было расшифровать и прочитать на другом сервере:
domain.ru, sub1.domain.ru, sub2.domain.ru, sub3.domain.ru и тп. То есть эти сайты объединяет единый корневой домен.
Необходимо настроить авторизацию на этих сайтах таким образом, чтобы пользователь осуществляя вход на одном сайте, автоматически считался авторизованным на другом.
Авторизация на сайтах реализована через Membership Provider. Пользователи хранятся в одной базе данных.
Решение:
Конечно же для решения этой задачи не обойтись без Cookies. Поэтому первое, что мы сделаем - это в web.config включим использование Cookie.
Здесь небольшое отступление. Для того, чтобы Cookie читалась на всех суб доменах верхнего уровня необходимо в качестве домена для Cookie указать корневой домен с точкой (для нашего примера .domain.ru)
Смотрим как сделать эти действия с помощью одной строчки в web.config
<authentication mode="Forms">
<forms cookieless="UseCookies" defaultUrl="/"
loginUrl="/" protection="All" domain=".domain.ru"
enableCrossAppRedirects="true"timeout="30000" />
</authentication>
Хочу отметить, что это строчка справедлива для Framework 4.0 Для предыдущих версий возможны изменения.
Следующий шаг - это конфигурация Membership Provider. Во-первых, необходимо указать тип хеширования hashAlgorithmType="SHA1" и использовать единый applicationName="applicationName"
<membership defaultProvider="MyProvider"
hashAlgorithmType="SHA1">
<providers>
<add name="MyProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="connectionStringName"
applicationName="applicationName"
passwordFormat="Hashed" />
</providers>
</membership>
Завершающий этап. Добавляем в web.config machineKey одинаковый для всех сайтов. Делаем это для того, чтобы авторизационную Cookie можно было расшифровать и прочитать на другом сервере:
<machinekey decryption="AES" decryptionkey="decryptionKey"
validation="SHA1" validationkey="validationKey"></machinekey>
decryptionKey, validationKey - указываем самостоятельно.
Также хочу отметить проблему с которой столкнулся. Указанная схема не работала на разных серверах по непонятным причинам. Решил проблему установкой обновления для Framework
http://support.microsoft.com/kb/2656351
Полезные ссылки по теме Forms Authentication Across Applications
Комментарии
Отправить комментарий