我正在使用Windows Identity Foundation (Wif) 安全令牌服务 (STS) 处理我的应用程序的身份验证,该应用程序运行良好。但是,我似乎无法使用STS进行长时间的运行登录。

从我的理解来看,我不应该关心申请级的客户令牌,因为它们可以到期他们想要的一切,它应该将我重定向到STS,只要他们仍在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");

它几乎直接从现有应用程序使用普通表格验证中获取。

来自我的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上的到期时间将来已有14天,而cookie是 不是 会话cookie。

当我需要登录STS时,我可以看到我的原始饼干仍然在那里。

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

有帮助吗?

解决方案

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

在这种思想列车中,我的运动越来越多,它使我意识到STS入门站点使用表格AUTH来确保index.aspx中发生的实际WIF授权。这个问题是我没有逻辑可以使用现有表单AUTH票来处理转移到表格Auth Secered Index页面。

这使我找到了类似的解决方案

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

其他提示

如果您使用的是被动重定向,您是否有 PersistentCookiesOnPassIverDirects 设置为true?

<wsFederation passiveRedirectEnabled="true"
    persistentCookiesOnPassiveRedirects="true" />
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top