Аутентификация форм ReturnUrl и поддомен для единого входа

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

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

Eg. В настоящее время: 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 у меня есть auth, настроенный так:

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

Ответы

Ответ 1

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

<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>

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

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

Ответ 3

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

ОБНОВЛЕНИЕ
Теперь посмотрите на эту ссылку http://www.developer-corner.com/development/dotnet/single-sign-on-across-multiple-asp-net-applications/


ОБНОВЛЕНИЕ
Вы также можете использовать метод FormsAuthentication.GetRedirectUrl