代码之家  ›  专栏  ›  技术社区  ›  Chris Marisic

Windows Identity Foundation安全令牌服务无法保持登录状态

  •  3
  • Chris Marisic  · 技术社区  · 15 年前

    (WIF公司) 安全令牌服务 (STS) 为我的应用程序处理身份验证,它运行良好。然而,我似乎无法得到任何长期运行的登录与STS。

    从我的理解,我不应该关心客户端令牌在应用程序级别,因为他们可以过期所有他们想要的,它应该重定向我到STS,只要他们仍然在STS上登录,它应该刷新他们的应用程序令牌。但它似乎不想让他们继续登录。

    以下是在我的生活中发生的事情登录.aspx关于STS

    var cookie = FormsAuthentication.GetAuthCookie(userName, persistTicket);
    
    if (persistTicket)
        cookie.Expires = DateTime.Now.AddDays(14);
    
    Response.Cookies.Add(cookie);
    
    var returnUrl = Request.QueryString["ReturnUrl"];
    Response.Redirect(returnUrl ?? "default.aspx");
    

    它几乎是直接从现有的应用程序中使用normalforms Auth获取的。

    从我的web.config文件

    <authentication mode="Forms">
          <forms loginUrl="Login.aspx" protection="All" timeout="2880" 
          name=".STS" path="/" requireSSL="false" slidingExpiration="true" 
          defaultUrl="default.aspx" cookieless="UseDeviceProfile" 
          enableCrossAppRedirects="false" />
    </authentication>
    

    在我登录后查看cookie,我可以看到cookie上的过期时间设置为未来14天,并且cookie是 不是 会话cookie。

    当我需要重新登录到STS时,我可以看到我原来的cookie仍然存在。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Chris Marisic    15 年前

    在阅读了@uosel的建议之后,这将引导我对这里到底发生了什么进行更深入的分析。而我的目标是只为STS本身而不是为STS消费站点创建持久cookie。这样,我就可以在STS消费站点的任何过期时间都在STS级别验证用户。

    这使我找到了一个类似于

    if(User.Identity.IsAuthenticated)
    {    
        if(IsValidUserCredentials())
        {
           var returnUrl = Request.QueryString["ReturnUrl"];
           Response.Redirect(returnUrl ?? "default.aspx");
        }    
    }
    else
    {
        DisplayLoginForm()
    }
    
        2
  •  1
  •   Jason Kleban    15 年前

    如果您使用的是被动重定向,您有 persistentCookiesOnPassiveRedirects

    <wsFederation passiveRedirectEnabled="true"
        persistentCookiesOnPassiveRedirects="true" />
    
    推荐文章