【问题标题】:Using Claims Types properly in Owin Identity and Asp.Net MVC在 Owin Identity 和 Asp.Net MVC 中正确使用声明类型
【发布时间】:2014-07-22 15:58:08
【问题描述】:

我正在使用 Owin 和 Identity,但我遇到了声明问题。

我有一些应用程序,其中用户使用电子邮件进行身份验证,而其他应用程序则使用用户名。

  1. 业务层中的登录方法可以根据情况接受电子邮件或用户名。

  2. 为了“混淆”用户身份,我在显示包含用户信息的页面时使用每个用户唯一的 GUID。

    我也使用它,因为有时电子邮件或用户名可能是 url 中的问题...

当我签署用户时,我有以下声明类型:

new Claim(ClaimTypes.Email, user.Email),
new Claim(ClaimTypes.Name, user.FullName),
new Claim(ClaimTypes.GivenName, user.FirstName),
new Claim(ClaimTypes.Surname, user.LastName),
new Claim(ClaimTypes.NameIdentifier, user.UserUniqueIdentifier.ToString())

所以我的解释是:

Email is the user's email

Name is the user's full name

GivenName is the user's first name

Surname is the user's last name

NameIdentifier is the user's unique identifier ... It can be the email, the username or in this case I am using an Unique ID.

奇怪的是用户名没有声明类型。放在哪里?

基本上,当用户名不用作唯一名称标识符时似乎存在问题,但它仍然是必需的。

我的逻辑声明类型有问题吗?

【问题讨论】:

    标签: asp.net-mvc owin


    【解决方案1】:

    ClaimTypes.Name (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) 应该用于用户名。

    ClaimTypes.NameIdentifier 通常用于用户 ID。在某些情况下,它可能是用户名。

    ASP.NET Identity 使用ClaimTypes.Name 存储用户名,ClaimTypes.NameIdentifier 存储用户的主键 GUID。

    【讨论】:

    • 你会在哪里存储用户的真实姓名?我的意思是,假设用户名为“John Brock Smith”
    • 您可以创建自己的声明。它们只是字符串。创建一个名为 FullName 的字符串常量。新声明(全名,“约翰·布洛克·史密斯”),
    【解决方案2】:

    如果您检查 Facebook 或 Google 从 oAuth 返回的内容,您会发现 ClaimTypes.NameClaimTypes.GivenName + ClaimTypes.Surname。 LinkedIn 返回然后连接,我相信这是一个错误,因为我在那里有一个完全不同的用户名。 Twitter 返回 ClaimTypes.Name 的用户名,但 Twitter 是一个特例,他们甚至不返回电子邮件。

    他们都在为ClaimTypes.NameIdentifier 使用一些不透明的数字标识符。他们使用自己的字符串名称,通常以urn:facebook:linkurn:google:profile 等开头,用于自定义数据。

    Asp.NET 身份模型使用 ClaimTypes.Name 的用户名。底线是ClaimTypes.Name 在实践中的使用方式不同。您可以将任何声明名称添加为字符串,并可以添加 urn:... 方案以使其明确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多