从MSAL 2.0令牌获取UPN和电子邮件地址

问题描述

从adal切换到msal 2.0浏览器库时,我在idToken响应中缺少用户的UPN,这导致在传递idToken后在principal.Identity.Name中没有名称的主体到后端。这在adal版本中可用。

var principal = tokenHandler.Validatetoken(validationToken,validationParameters,out SecurityToken validatedToken);

我得到preferred_name的索赔,但是调用Graph API来检索电子邮件地址似乎不可行,因为它不是UPN。

一般来说,我应该如何更改msal的令牌验证和UPN检索?传递accesstoken并单独验证以获取更多声明?

Docs for idToken

Docs for accessToken

Code sample

解决方法

事实证明,msal支持2种方法来获得更多索赔

  1. 通过广告清单设置
  2. 当请求以下令牌时

通过添加其他范围

const loginRequest = {
    scopes: ['User.Read','email']
};

,并且在验证令牌时,可以通过设置TokenValidationParameters.NameClaimType

使用不同的声明来获取委托人的身份