在ASP.NET
Web API中,我需要能够识别具有唯一ID的用户,以便我可以在另一个DB中引用它们。所有用户都在Azure Active Directory
。我不想要一些可以随时间变化的东西(like a SID)。
我尝试使用Membership
this获取用户Guid,但我发现Azure Active Directory does not support Memberships。
我发现IdentityExtensions.GetUserId()的使用方式如下:User.Identity.GetUserId()
。生成的id似乎既不是Guid也不是SID。但是,它似乎对每个用户都是唯一的。
可以User.Identity.GetUserId()
用于唯一标识AAD用户吗?如果没有,做正确的方法是什么?
答案 0 :(得分:2)
可以使用User.Identity.GetUserId()来唯一标识AAD用户吗?
是的,如果它正在使用ClaimTypes.NameIdentifier。
你怎么知道(除了F12 / ctrl + F12)?
默认情况下,它应该使用ClaimTypes.NameIdentifier,前提是您使用的是ASP Identity或类似的代码(较旧的成员资格,基本上是Microsoft实现)。
<ClaimsIdentityOptions.cs>
/// <summary>
/// Gets or sets the ClaimType used for the user identifier claim.
/// </summary>
/// <remarks>
/// This defaults to <see cref="ClaimTypes.NameIdentifier"/>.
/// </remarks>
public string UserIdClaimType { get; set; } = ClaimTypes.NameIdentifier;
IdentityOptionsTest.cs中有一个名为VerifyDefaultOptions的单元测试,可用于确认默认值。 导航到实现是确保唯一的方法。但是,如果您没有更改默认值,则不需要它。