嵌套在B2C令牌的“ idp_access_token”声明中的JWT令牌

时间:2020-10-31 16:03:16

标签: jwt asp.net-core-mvc asp.net-identity openid-connect azure-ad-b2c

我的项目是MVC Core 3.1 Web应用程序。 验证是基于 Microsoft.identity.web 模板来登录Azure AD B2C中的用户的。

您可以在此处找到示例:https://github.com/AzureAD/microsoft-identity-web/wiki#samples

用户可以在B2C上以标准用户身份注册/登录,也可以使用公司帐户登录(azure AD,因此是openID Connect Identity Provider)。

当用户使用公司帐户登录时,我得到一个名为“ idp_access_token” 的声明的JWT令牌,其中包含来自Azure AD的access_token。它包含我需要该应用程序的一些声明(由于某些原因,我什至看不到B2C令牌中的emailAddress / unique_name,所以我需要从这里获取它...)。

但是我不确定应该如何(在哪里)处理此令牌以及如何访问其中的声明。我可以将它们映射到ClaimPrincipal中吗?因为我想将电子邮件用作“ User.identity.name”。 我应该编写服务(瞬态?)并在需要的地方注入它吗?

1 个答案:

答案 0 :(得分:0)

听起来好像您正在使用实际上不需要的功能。通常,嵌入式IdP访问令牌用于调用IdP托管的服务。例如,某个用户使用Facebook登录,而您的应用程序想要调用Facebook API来发布到其Facebook墙上。

作为应用程序开发人员,您不应自己检查或使用令牌,因为您无法信任令牌。如果要从该令牌获取数据,请在B2C策略/用户流中执行相关的声明映射,因为B2C确实会验证令牌并可以信任它。你不能。 IdP提供的服务将对其进行验证,因此也可以信任它。