了解 MVC 5 用户声明 Table

Understanding MVC5 UserClaim Table

我做了很多研究,但 none 帮助我理解了 UserClaim 的意义所在 Table。

创建 MVC5 项目时,会在注册数据库时创建一些默认 table。除了 UserClaim,我理解所有这些的目的。

据我了解,用户声明基本上是关于用户的密钥对值。例如,如果我想要一个 FavouriteBook 字段,我可以将该字段添加到用户 table 并访问它。实际上我已经内置了类似的东西。我的每个用户都有 "Custom URL" 所以我通过以下方式创建了一个声明:

public class User : IdentityUser
{
    public string CustomUrl { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        userIdentity.AddClaim(new Claim("CustomUrl", CustomUrl));
        return userIdentity;
    }
}

public static class UsersCustomUrl
{
    public static string GetCustomUrl(this IIdentity identity)
    {
        var claim = ((ClaimsIdentity)identity).FindFirst("CustomUrl");
        return (claim != null) ? claim.Value : string.Empty;
    }
}

以上基本上允许我通过简单地调用 User.Identity.GetCustomUrl()

来访问 CustomUrl

上述代码不会写入 UserClaims table,因为该值存在于 Users Table 中。那么这个table有什么意义呢?

我推测也许我应该将 CustomUrl 添加到 UserClaims 并以某种方式将其绑定到身份,这可能是为了什么?我很想知道答案!

如果您提供多种方式让您的用户可以在您的网站上注册/登录,那么声明非常有用...特别是,我说的是 [=18] 等组织的第三方身份验证=]、脸书和推特。

用户通过他们选择的第三方对自己进行身份验证后,该第三方将向您披露一组声明,一组以您可以识别用户的方式描述用户的信息。

索赔将包含的信息因提供商而异。例如,Google 将共享用户的电子邮件地址、他们的名字、姓氏,但将其与 Twitter 进行比较……Twitter 不共享任何这些,您会收到他们的 Twitter 帐户的标识符以及他们的访问令牌。

基于声明的身份验证提供了一种简化所有这些信息的简单方法,而替代方法很可能意味着在您的数据库中为与您合作的每个单独的提供商创建表格。