Аутентификация форм 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 в текущем домене. Это должно (теоретически) предотвратить межсайтовый скриптинг.
Ответ 2
Взгляните на http://weblogs.asp.net/dfindley/archive/2007/02/06/fix-returnurl-when-sharing-forms-authentication-with-multiple-web-applications.aspx
Ответ 3
Вы можете обойти эту проблему, передав билет проверки подлинности в строке запроса
а не в файле cookie.
Это может помочь вам
ОБНОВЛЕНИЕ
Теперь посмотрите на эту ссылку http://www.developer-corner.com/development/dotnet/single-sign-on-across-multiple-asp-net-applications/
ОБНОВЛЕНИЕ
Вы также можете использовать метод FormsAuthentication.GetRedirectUrl