我正在使用的应用程序是使用ASP.NET Identity的MVC 5 Web应用程序。
我们试图允许某些用户创建其他用户(即预先注册他们)。在创建时,我们希望传递一些元数据,我们希望将其存储为针对该用户的声明,例如电子邮件地址,年龄等。
我已经看到创建声明的示例,调用SignIn方法将声明保留在数据库中。我们显然不希望这些帐户登录,只需保存声明。
var user = new ApplicationUser { UserName = "joe@bloggington.com" };
var pwd = "password123"
var result = await _identityService.CreateAsync(user, pwd);
if (!result.Succeeded)
return null;
var identity = await _identityService.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.Email, "joe@bloggington.com"));
// PERSIST THIS CLAIM
当然,我对索赔的工作方式感到非常困惑,但这对我来说似乎是一种常见的情况。感谢任何帮助或反馈。
答案 0 :(得分:1)
当你第一次接近它们时,声明很混乱。首先,您需要一些关于声明和身份确实是什么的资源:
https://msdn.microsoft.com/en-us/library/ff359101.aspx能够很好地解释它。
几年前曾问过{p> Explain "claims-based authentication" to a 5-year-old并且在MSDN链接方面表现良好。蒸馏,声称基本上是属性。用户名是声明。电子邮件地址是索赔。用户拥有的每个角色都是一个声明。结合他们构成身份。声明旨在由应用程序的授权系统使用,但它们如何被持久化/存储完全是任意的。
您真正想要做的是将电子邮件地址,年龄等存储在数据库中,就像存储任何其他用户数据一样。你如何做到这一点取决于你。信息成为"索赔的唯一时间"如果您希望该信息作为登录用户身份的一部分可用,那么您将从数据库中提取信息(如电子邮件地址)并将其添加到用户&#39索赔(可能是一个单独的问题/讨论)。