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

Заранее спасибо!

0 ответов

Другие вопросы по тегам