基本上我需要在网站的所有页面上提供用户数据。 我需要在布局中显示一些用户属性,例如:
[用户名],[FirstName],[LastName],[电子邮件],[IsEmailVerified], [电话],[LastLoginDate]和另外4个属性...
但是,需要考虑这些方面:
现在,通过我的一些搜索,我发现自2008年发布的这篇文章,由Microsoft发布,关于表单身份验证:Storing Additional User Data in the Ticket和Using a Custom Principal。
我认为这是最接近的方法,因为现在我使用 User.Identity.Name 来仅获取存储在身份验证票据中的[用户名],我喜欢使用它,因为它很快,可用且简单。
但是我也有一些问题困扰我这个方法:
感谢帮助者。
答案 0 :(得分:1)
是的,它仍然有效。尽管人们会告诉您存在涉及声明的新方法,并且您应该考虑新的身份子系统,但旧的良好表单身份验证仍然是可行的选择之一。
对于“大量数据”,它只是表单模块的一个缺点,它不处理多个cookie,因此,您受到单个cookie的4kb限制的约束。考虑到加密和签名,这使得cookie的自定义数据部分中可用的数据少得多。但是,仍然应该有一个类似10个属性的简单序列化。
如果您想向前迈出一半,您可以切换到会话身份验证模块,这样做的好处是它基于声明并且它支持大型用户数据(因为它会自动将数据拆分为块) 。我前段时间写过这篇博客
http://www.wiktorzychla.com/2014/11/forms-authentication-revisited-for-net.html
此方法的摘录
var identity = new ClaimsIdentity( "custom" );
identity.AddClaim( new Claim( ClaimTypes.Name, txtLogin.Text ) );
var principal = new ClaimsPrincipal( identity );
principal.AddClaim( new Claim( ClaimTypes.UserData, "whatever goes here" ) );
SessionAuthenticationModule sam =
FederatedAuthentication.SessionAuthenticationModule;
var token =
sam.CreateSessionSecurityToken( principal, string.Empty,
DateTime.Now.ToUniversalTime(), DateTime.Now.AddMinutes(20).ToUniversalTime(), false );
sam.WriteSessionTokenToCookie( token );