Работа с аутентификацией в 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, чтобы разрешить перенаправления только на утвержденные веб-сайты.

Помогает ли возиться с этим свойством?

Другие вопросы по тегам