3

我正在使用 Windows Identity Foundation (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不是会话 cookie。

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

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

4

2 回答 2

2

在阅读了@uosel 的建议后,这让我对这里发生的事情进行了更深入的分析。而我的目标是仅为 STS 本身而不是为 STS 消费站点创建一个持久 cookie。这样,我总是可以在 STS 消费站点到期时在 STS 级别验证用户。

随着这一思路的进一步发展,我突然意识到 STS 入门站点使用表单身份验证来确保 index.aspx 中发生的实际 WIF 授权。问题是我没有逻辑可以使用现有的表单身份验证票来处理转移到表单身份验证安全索引页面。

这让我找到了一个类似的解决方案

if(User.Identity.IsAuthenticated)
{    
    if(IsValidUserCredentials())
    {
       var returnUrl = Request.QueryString["ReturnUrl"];
       Response.Redirect(returnUrl ?? "default.aspx");
    }    
}
else
{
    DisplayLoginForm()
}
于 2010-09-02T14:52:04.283 回答
1

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

<wsFederation passiveRedirectEnabled="true"
    persistentCookiesOnPassiveRedirects="true" />
于 2010-09-01T18:40:30.153 回答