在ASP.NET
Web API 中,我需要能够识别具有唯一 id 的用户,以便我可以在另一个数据库中引用他们。所有用户都在Azure Active Directory
上。我不想要会随着时间的推移而改变的东西(比如 SID(。
我尝试使用这样的Membership
获取用户 Guid,但我发现 Azure Active Directory 不支持成员资格。
我发现 IdentityExtensions.GetUserId(( 是这样用的:User.Identity.GetUserId()
。生成的 id 似乎既不是 Guid 也不是 SID。但是,它似乎对每个用户都是唯一的。
是否可以使用User.Identity.GetUserId()
唯一标识 AAD 用户?如果没有,正确的方法是什么?
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 中有一个名为 VerifyDefaultOptions 的单元测试.cs可用于确认默认值。 导航到实现确实是确定的唯一方法。但是,如果您没有更改默认值,则不需要它。
关于名称标识符的原始解释在这里
ASP 标识源代码