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

时间:2010-08-27 15:43:56

标签: c# asp.net wif sts-securitytokenservice stay-logged-in

我正在使用Windows身份基础(WIF)安全令牌服务(STS)来处理我的应用程序的身份验证,该应用程序运行良好且良好。但是我似乎无法使用STS获得任何长时间运行登录。

根据我的理解,我不应该关心应用程序级别的客户端令牌,因为它们可以使所有想要的到期,并且它应该将我重定向到STS,只要它们仍然登录STS它应该刷新他们的应用令牌。然而,似乎并不想让他们登录。

这是我在STS上的login.aspx中发生的事情

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");

使用普通的Forms 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是 NOT 会话Cookie。

当我需要重新登录STS时,我可以看到我的原始cookie仍在那里。

是否存在某种时间戳功能,STS嵌入到cookie中使我的cookie无效,即使据我所知它应该仍然有效?

2 个答案:

答案 0 :(得分:2)

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

在这一思路中有更多的运动,我突然意识到STS启动站点使用表单auth来保护index.aspx中发生的实际WIF授权。问题是我没有使用现有表单身份验证票据来处理传输到表单身份验证安全索引页面的逻辑。

这引出了类似于

的解决方案
if(User.Identity.IsAuthenticated)
{    
    if(IsValidUserCredentials())
    {
       var returnUrl = Request.QueryString["ReturnUrl"];
       Response.Redirect(returnUrl ?? "default.aspx");
    }    
}
else
{
    DisplayLoginForm()
}

答案 1 :(得分:1)

如果您使用被动重定向,是否将persistentCookiesOnPassiveRedirects设置为true?

<wsFederation passiveRedirectEnabled="true"
    persistentCookiesOnPassiveRedirects="true" />