Проверка подлинности с помощью форм ReturnUrl и поддомен для единого входа - PullRequest
14 голосов
/ 11 февраля 2011

У меня есть домен http://abc.com и поддомен http://sub.abc.com.Я реализую единую регистрацию между двумя сайтами, разделяя файл cookie проверки подлинности форм.Это достигается тем, что оба сайта совместно используют validationKey и decryptionKey в machineKey.

Когда пользователь переходит на страницу в поддомене, я хочу, чтобы пользователь прошел проверку подлинности в корневом домене и перенаправил обратно на поддомен.В настоящее время пользователь перенаправлен на страницу входа, но ReturnUrl хочет перенаправить на корневой сайт.

Например.В настоящее время: http://abc.com/login.aspx?ReturnUrl=%2fsecure%2fdefault.aspx

, но я хочу: http://abc.com/login.aspx?ReturnUrl=http:%2f%2fsub.abc.com%2fsecure%2fdefault.aspx

Как этого можно достичь?

В web.config моего субдомена у меня настроена авторизация, подобная этой, в настоящее время:

<authentication mode="Forms">
  <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" />
</authentication>

Ответы [ 3 ]

14 голосов
/ 15 февраля 2011

Я решил эту проблему, установив строку запроса в своем элементе формы из моего субдомена:

<authentication mode="Forms">
    <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx?returnsite=sub" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" />
</authentication>

Затем в своем коде авторизации на главном веб-сайте я проверяю эту строку запроса.Если он существует, я создаю URL перенаправления, добавляя свой поддомен к returnurl.

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

6 голосов
/ 11 февраля 2011
1 голос
/ 11 февраля 2011

Вы можете обойти эту проблему, передав аутентификационный билет в параметре строки запроса, а не в файле cookie. Это может помочь вам

ОБНОВЛЕНИЕ Теперь посмотрите на эту ссылку http://www.developer -corner.com / development / dotnet / единый вход через несколько приложений asp-net-Applications /

UPDATE Вы также можете использовать метод FormsAuthentication.GetRedirectUrl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...