FormsAuthenticationTicket - пустые данные пользователя в одном приложении (CrossApp Form Auth)
Как я использую FormsAuthentication:
app1.example.com:
- Содержит страницу входа (login.aspx)
- перенаправляет, если не аутентифицирован
web.config:
<authentication mode="Forms"> <forms name="example" loginUrl="login.aspx" domain=".example.com" protection="All" path="/" timeout="30" cookieless="UseCookies" enableCrossAppRedirects="true" /> </authentication>
app2.example.com:
- Просто перенаправляет, если не аутентифицирован ( http://app1.example.com/login.aspx)
web.config:
<authentication mode="Forms"> <forms name="example" loginUrl="http://app1.example.com/login.aspx" domain=".example.com" protection="All" path="/" timeout="30" cookieless="UseCookies" enableCrossAppRedirects="true" /> </authentication>
Для входа в систему я делаю следующее:
FormsAuthentication.SetAuthCookie(
userId.ToString(), false);
FormsAuthenticationTicket ticket1 =
new FormsAuthenticationTicket(
1,
userId.ToString(),
DateTime.Now,
DateTime.Now.AddMinutes(20),
false,
sessionid // sessionid
);
HttpCookie cookie1 = new HttpCookie(
FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(ticket1));
HttpContext.Current.Response.Cookies.Add(cookie1);
string returnUrl = HttpContext.Current.Request["redirect"] == null ? "app1.example.com" : HttpContext.Current.Request["redirect"];
HttpContext.Current.Response.Redirect(returnUrl);
В каждом приложении я должен зачитать свой пользовательский "sessionid" из AuthCookie. В App2 я получаю правильный идентификатор, а в App1, который содержит страницу входа, я не получаю (он пуст).
У кого-нибудь есть идеи, как это получается?
Вот мой код для чтения пользовательских данных:
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
Все приложения работают на Asp.Net 4.5.2
Заранее спасибо!