AAD:如何在Web API中唯一标识用户?

时间:2017-07-26 20:32:26

标签: c# asp.net azure active-directory

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用户吗?如果没有,做正确的方法是什么?

1 个答案:

答案 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的单元测试,可用于确认默认值。 导航到实现是确保唯一的方法。但是,如果您没有更改默认值,则不需要它。

here is the chart on the other!

Original explanation regarding NameIdentifier here