使用 ASP.NET 创建具有声明的现成用户

Creating ready-made users with claims with ASP.NET

我正在处理的应用程序是一个 MVC 5 Web 应用程序,使用 ASP.NET Identity。

我们试图允许某些用户创建其他用户(即预注册)。在创建时,我们想传递一些元数据,我们希望将其存储为针对该用户的声明,例如电子邮件地址、年龄等。

我在创建声明的地方看到的示例调用 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

当然,我可能对索赔的运作方式感到非常困惑,但这对我来说似乎是很常见的情况。感谢任何帮助或反馈。

当您第一次接触索赔时,索赔非常令人困惑。首先,您需要一些关于什么是真正的声明和身份的资源:

https://msdn.microsoft.com/en-us/library/ff359101.aspx 解释得很好。

Explain "claims-based authentication" to a 5-year-old 几年前被问到,与 MSDN link.

相得益彰

提炼,声明基本上是属性。用户名是声明。电子邮件地址是索赔。用户拥有的每个角色都是一个声明。它们结合起来构成了身份。声明旨在由应用程序的授权系统使用,但它们如何 persisted/stored 完全是任意的。

您在这里真正想做的是将电子邮件地址、年龄等存储在数据库中,就像您存储任何其他用户数据一样。你如何做到这一点取决于你。只有当您希望该信息作为登录用户身份的一部分可用时,该信息才会变成 "claim",此时您将从数据库中提取信息(如电子邮件地址),然后将其添加到用户的声明中(这可能是一个单独的 question/discussion)。