5

我正在查看ASP.NET MVC 5身份验证的新功能,并注意到现在的一切都是ClaimsIdentity。我想知道这些值存储在哪里:在ASP.NET MVC中的ClaimsIdentity 5

会话,缓存或Cookie本身。

如果它存储在cookie中,那么在超过cookie大小限制之前可以存储的索赔号存在明显的限制。

回答

3

ClaimsIdentity本身没有存储机制。但是,如果您使用OWIN Cookie中间件,那么它会存储在cookie中。是的 - 有一个限制。

+0

Bummer,那么您如何处理来自Active Directory的角色,由于企业环境,角色可能是20或30?我想你必须创建一个混合的ClaimsIdentity,它以某种方式与Active Directory挂钩? –

+0

你不把它们存储在cookie中? – leastprivilege

+0

或使用Windows身份验证 - 这种方式你得到一个WindowsIdentity。 – leastprivilege

0

因此,默认情况下,MVC5模板从数据库生成ClaimsIdentity并将其保存到一段时间内有效的cookie表单中。但用户数据默认存储在SQL数据库中。

+0

默认情况下,域数据存储在SQL Server中,我理解该部分,但是当您创建ClaimsIdentity对象并将其提供给AuthenticationManager时,它将相同的数据存储到cookie中。如果你的数据对于一个cookie来说太大了,那么这个cookie永远不会写出来给浏览器,因为它们会由于违反大小限制而被拒绝。 –

+0

是的,Owin CookieMiddleware负责将ClaimsIdentity转化为cookie –

2

如上所述,来自各种来源的声明可以在会话之间通过缺省使用OWIN在身份验证过程中创建的Cookie持久保存。这通常在\ App_Start \ Startup.Auth.cs中配置。您可以设置Cookie的到期时间,是否需要滑动到期(在返回访问时更新cookie超时),身份验证/授权端点的位置等等。后面的部分允许您在ClaimPrincipal期间提供额外的声明和ClaimsIdentity创建过程。有了一个体面的到期,你只需要为用户会话做一次。在后续访问您的网站时,OWIN中间件将解析cookie并重新创建此步骤中的所有声明。

您不应该担心cookie的大小,新的OWIN认证中间件实现了cookie分块(目前可以从预发布源获得 - 稳定版本不会分块)。

我们已经在我们的企业中实现了这一点,我们有几个声明来源:我们的内部单点登录服务,活动目录和我们自己的应用程序数据库(关于我们关心的用户的角色和附加属性)。