5

我们有一个使用 Asp.Net Identity 的 Asp.Net 4.5 MVC 应用程序来管理我们的客户数据库。我们目前正在使用 Microsoft 帐户身份验证。我们正在考虑使用 OpenId Connect,以便拥有工作/学校帐户的客户也可以登录添加登录到 .NET MVC Web 应用程序

Microsoft 帐户身份验证返回 ProviderKey 作为已登录用户的唯一 ID。这映射到我们客户数据库中的 UserId。

OpenId Connect 似乎没有返回 ProviderKey,但NameIdentifier看起来很有希望 ClaimsPrincipal.Current.FindFirst(System.IdentityModel.Claims.ClaimTypes.NameIdentifier)?.Value;

OpenId Connect返回的是NameIdentifier用户的唯一标识吗?随着时间的推移,它能否可靠地用于唯一地识别用户?

4

1 回答 1

8

NameIdentifier 是 OpenId Connect 返回的用户的唯一标识符吗?随着时间的推移,它能否可靠地用于唯一地识别用户?

AFAIK,从 id_tokenNameIdentifier映射NameId或声明(请参阅此处)。对于 Azure AD 的 id_token,它使用了声明。SubSub

sub claim的描述中:

标识令牌断言信息的主体,例如应用程序的用户。此值是不可变的,不能重新分配或重用,因此可用于安全地执行授权检查。由于主题始终存在于 Azure AD 颁发的令牌中,因此我们建议在通用授权系统中使用此值。

答案是肯定的,它可靠地用于随着时间的推移唯一地识别用户。

于 2017-03-28T08:36:44.767 回答