У меня есть веб-приложение, которое можно установить на множество доменов и путей.
Итак:
Все отдельные экземпляры приложения с одним и тем же кодом .
Проблема в том, что если клиент входит в систему на client1Name. {MySite.com} , затем посещает один из других сайтов, их браузер отправляет файл cookie аутентификации.
Во всех случаях ] FormsAuthentication.SetAuthCookie
не устанавливает ни Путь
, ни Домен
.
Я бы ожидал:
Домен
= client1Name. {MySite.com} Путь
= / Домен
= client2Name. {MySite.com} Путь
= / Домен
= демонстрация. {mySite.com} Путь
= / prospect1Name Домен
= демонстрация. {MySite.com} Путь
= / prospect2Name Домен
= демонстрация. {MySite.com} Путь
= / prospect3Name Я могу вручную переопределить поведение .Net, чтобы явно установить их, но я не конечно, зачем мне это нужно - конечно, это должно быть поведение по умолчанию при установке файла cookie аутентификации или, по крайней мере, параметр, который можно установить без повторной записи больших его фрагментов.
Я что-то упустил? Есть ли способ заставить FormsAuthentication.SetAuthCookie
установить Путь
и Домен
?
Если нет, то какой способ лучше всего динамически считывать ] Путь
и Домен
? Один и тот же код должен работать на всех сайтах, и я не хочу добавлять дополнительный ключ конфигурации.
Обновление
Вот мое текущее решение:
// replacement for FormsAuthentication.SetAuthCookie(user.UserName, false);
// as that fails to limit the cookie by domain & path and fails.
var cookie = FormsAuthentication.GetAuthCookie(username, false);
cookie.HttpOnly = true;
cookie.Path = this.Request.ApplicationPath;
cookie.Secure = string.Equals("https", this.Request.Url.Scheme, StringComparison.OrdinalIgnoreCase);
// the browser will ignore the cookie if there are fewer than two dots
// see cookie spec - http://curl.haxx.se/rfc/cookie_spec.html
if (this.Request.Url.Host.Split('.').Length > 2)
{
// by default the domain will be the host, so www.site.com will get site.com
// this may be a problem if we have clientA.site.com and clientB.site.com
// the following line will force the full domain name
cookie.Domain = this.Request.Url.Host;
}
this.Response.Cookies.Add(cookie);
Тем не менее, это похоже на большой обходной путь для чего-то FormsAuthentication.SetAuthCookie
должен уметь. Это действительно лучший способ?