使用 Azure Active Directory OAuth 时没有名字或姓氏声明

Sha*_*lle 5 asp.net-mvc azure oauth-2.0 azure-active-directory

我们正在使用 Azure Active Directory 对 MVC 应用程序进行身份验证,但我们在 ClaimsPrincipal 中获得的唯一信息是名称和组成员资格。

我们还需要访问用户的名字和姓氏。有关我们如何解决此问题的任何指示吗?

Tho*_*mas 3

OpenID Connect 引入了 id_token(这是 JWT)。

查看文档,id_token 包含一些可能匹配的声明:

  • given_name:提供用户的名字或“给定”名称,如 Azure AD 用户对象上设置的那样。
  • family_name:提供 Azure AD 用户对象中定义的用户的姓氏或姓氏。
  • unique_name:提供人类可读的值,用于标识令牌的主题。该值不保证在租户内是唯一的,并且设计为仅用于显示目的。

因此,在您的控制器中,您可以像这样访问这些声明:

using System.Security.Claims;
...
var identity = (ClaimsIdentity)User.Identity;
var lastName = identity.Claims.First(
    c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname").Value;
var firstName = identity.Claims.First(
    c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname").Value;
var displayName = identity.Claims.First(c => c.Type == "name").Value;
Run Code Online (Sandbox Code Playgroud)

这些声明对应于 Azure AD 中的名字、姓氏和显示名称:

Azure AD 基本用户信息