【问题标题】:How do/Should I persist a ClaimsPrincipal?我如何/应该坚持一个 ClaimsPrincipal?
【发布时间】:2017-04-16 11:06:08
【问题描述】:

我刚刚看了Introduction to Identity and Access Control in .NET 4.5 video on Pluralsight。我正在尝试从此转换旧的网络表单应用程序(不是 MVC 和 OWIN)...

Dim authTicket As New FormsAuthenticationTicket(1, "Bob", DateTime.UtcNow.ToLocalTime(), DateTime.UtcNow.ToLocalTime.AddMinutes(60), False, "Master")
Dim authCookie As New HttpCookie("MyApp", FormsAuthentication.Encrypt(authTicket))

...到ClaimsIdentity 和基于声明的方法。尽管视频中涵盖了ClaimsIdentity 及其声明,但几乎没有提到如何将它们全部连接在一起并跨页面保持用户(以前自动完成的事情)。

例如,这是否是上述设置用户声明的有效替代方法?

Dim fd As New FormsIdentity(New FormsAuthenticationTicket("MyApp", True, 60))
fd.AddClaims(New List(Of Claim) From {
 New Claim(ClaimTypes.Name, "Bob"),
    New Claim(ClaimTypes.Role, "Master")
})
Dim p As New ClaimsPrincipal(fd)

如果是这样,ClaimsPrincipal 如何在后续页面上存储/持久/检索? 目前我没有使用 OWIN,但如果它有利于这种情况,可以介绍它。

【问题讨论】:

    标签: asp.net forms-authentication wif claims-based-identity


    【解决方案1】:

    AFAIK A ClaimsPrincipal 在“序列化”时始终转换为某种 SecurityToken。如果它由 STS 发送,则它是 SAML 或 JWT 安全令牌。如果在会话期间记住了它,那么它就是SessionSecurityToken。这些令牌中的每一个都有一个对应的SecurityTokenHandler 类。

    在经典的 ASP.NET/MVC 中,您有两个 http 模块:WSFederationAuthenticationModuleSessionAuthenticationModule。后者确保ClaimsPrincipal 跨会话存储。默认情况下,WIF 使用 SessionSecurityTokenHandler 并将 ClaimsPrincipal 存储在一堆 cookie 中。

    因此,一旦您知道序列化ClaimsPrincipal 的道路经过SecurityToken 之后,您的问题就会变得更容易。您首先将其转换为SecurityToken,然后使用处理程序“将其转换为字符串”。

    对你来说,归结为实例化正确的 SecurityTokenHandler 派生。要反序列化它,您只需调用ValidateToken(这是反序列化令牌的好方法名称)。这为您提供了一个声明列表,可以轻松地将其转换为 ClaimsIdentityClaimsPrincipal

    要对其进行序列化,您可能需要传递 SecurityTokenDescriptor(您将声明放入其中)以将您的 ClaimsPrincipal 转换为 SecurityToken,然后 SecurityTokenHandler 可以将其转换为“字符串” .

    【讨论】:

    • 谢谢威利。我今天将阅读这些主题。手动完成这一切似乎很奇怪,因为这一切都被硬烤到 ASP.NET 2.0+ 中并自动发生......
    • 我通过SessionSecurityTokenSessionAuthenticationModule 找到了答案,后者需要对web.config 进行大量添加
    猜你喜欢
    • 2021-01-26
    • 2011-06-14
    • 2013-11-28
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多