Работа с аутентификацией в asp.net с использованием членства
Хорошо, вот проблема:
У меня есть два сайта: www.mysite.com и blog.mysite.com (поддельные имена сайтов), которые предполагают обмен аутентификацией. Страница входа находится на www.mysite.com/login/login.aspx
Теперь на сайте блога есть web.config со следующим разделом аутентификации:
<authentication mode="Forms">
<forms timeout="50000000"
loginUrl="http://www.mysite.com/login/login.aspx"
defaultUrl="~/"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
Теперь я ударил blog.mysite.com/andrey/page.aspx
и он перенаправляет меня на страницу входа, которая находится на www
сайт. Реальная проблема заключается в том, что строка запроса "reditect" будет содержать только относительный URL страницы (andrey/page.aspx
), поэтому, когда я войду в систему, он будет пытаться перенаправить меня на www.mysite.com/andrey/page.aspx
не blog.mysite.com/andrey/page.aspx
где я начал, так что, конечно, все терпит неудачу.
Есть ли способ сообщить объекту Membership указать полный путь в параметре строки запроса "redirect", когда он возвращается на страницу входа?
Спасибо! Андрей
1 ответ
Предполагая, что каждый домен имеет свой собственный web.config, я думаю, что это может работать.
1) Создайте страницу входа для www.mysite.com и blog.mysite.com
2) Укажите обе базы данных членов
3) Убедитесь, что оба имеют одинаковый атрибут applicationName членства:
<membership><providers><add applicationName="mySite">
4) Убедитесь, что у обоих одинаковое имя формы:
<authentication mode="Forms"><forms name="mySite">
Это должно гарантировать, что оба сайта используют одну и ту же базу данных о членстве и один и тот же куки-файл аутентификации, но они будут использовать свои индивидуальные страницы входа в систему, поэтому URL-адрес возврата должен подойти.
Можете ли вы вызвать метод FormsAuthentication.SetAuthCookie и вручную перенаправить его на реферер http?
Я только что видел это в документации для FormsAuthentication.RedirectFromLoginPage
По умолчанию переменная ReturnUrl должна ссылаться на страницу в текущем приложении. Если ReturnUrl ссылается на страницу в другом приложении или на другом сервере, метод RedirectFromLoginPage перенаправляет на URL-адрес в свойстве DefaultUrl. Если вы хотите разрешить перенаправления на страницу за пределами текущего приложения, необходимо установить для свойства EnableCrossAppRedirects значение true, используя атрибут enableCrossAppRedirects элемента конфигурации форм. Примечание о безопасности Примечание по безопасности:
Установка для свойства EnableCrossAppRedirects значения true, чтобы разрешить перенаправления между приложениями, представляет собой потенциальную угрозу безопасности. Когда разрешены перенаправления между приложениями, ваш сайт уязвим для вредоносных веб-сайтов, которые используют вашу страницу входа, чтобы убедить пользователей вашего веб-сайта, что они используют защищенную страницу на вашем сайте. Чтобы повысить безопасность при использовании перенаправлений между приложениями, необходимо переопределить метод RedirectFromLoginPage, чтобы разрешить перенаправления только на утвержденные веб-сайты.
Помогает ли возиться с этим свойством?