【问题标题】:How to store user data on the server instead of cookies using Windows Identity Foundation如何使用 Windows Identity Foundation 将用户数据而不是 cookie 存储在服务器上
【发布时间】:2015-01-10 21:34:20
【问题描述】:

我正在使用 WIF 开发 MVC 应用程序。

我正在尝试使用以下方式将一些会话变量存储在 ClaimsIdentity 中:

ClaimsIdentity identity = HttpContext.User.Identity as ClaimsIdentity;
identity.AddClaim(new Claim("foo", "bar"));

这似乎将所有内容都存储在 cookie 中。

我试图弄清楚如何将这些数据存储在服务器上。我环顾四周,但没有找到任何真正有用的东西(在 WIF 方​​面我完全是新手)。

有没有简单的方法可以做到这一点?

【问题讨论】:

  • 这和你想做的类似吗??看看之前的 SO 帖子stackoverflow.com/questions/21404935/…
  • @DJKRAZE 我不这么认为,除非我错过了什么,否则这并不能解决存储介质(cookie 与服务器)的问题。
  • 我认为您可以实现类似的东西并将其存储在客户端,因为它看起来像链接中的代码正在执行的操作..您可以不将其存储在会话对象中..?

标签: c# asp.net-mvc asp.net-identity wif windows-identity


【解决方案1】:

您可以将身份验证模块设置为引用模式,以便让它将声明存储在服务器上的会话中 - 这样,cookie 只包含一个映射回声明的标识符。

执行此操作的最简单方法是处理 SessionSecurityTokenCreated 事件并在创建令牌时为其设置属性,这可以通过在 global.asax 中实现以下方法来完成:

void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, SessionSecurityTokenCreatedEventArgs e) {
    e.SessionToken.IsReferenceMode = true;
}

参考见the WIF Session Management overview on msdn

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2011-04-21
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    相关资源
    最近更新 更多