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

Posted

技术标签:

【中文标题】JWT 令牌嵌套在 B2C 令牌的“idp_access_token”声明中【英文标题】:JWT Token nested in the "idp_access_token" Claim of the B2C token 【发布时间】:2021-02-13 19:42:24 【问题描述】:

我的项目是一个 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 身份提供商)登录。

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

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

【问题讨论】:

【参考方案1】:

听起来您正在使用您实际上并不需要的功能。通常嵌入式 IdP 访问令牌用于调用 IdP 托管的服务。例如,用户使用 Facebook 登录,而您的应用想要调用 Facebook API 以在他们的 Facebook 墙上发帖。

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

【讨论】:

以上是关于JWT 令牌嵌套在 B2C 令牌的“idp_access_token”声明中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 B2C 和 Blazor 获取 JWT 不记名令牌

如何在 Java 中验证 Azure B2C id 令牌的 JWT 签名?

如何在 Web API 中验证 Azure B2C JWT 令牌?

Azure B2C - 无法从策略中的 JWT 客户端断言令牌读取“日期”声明

仅验证从 Azure B2C AD 生成的 JWT 令牌的签名 [重复]

如何从已登录用户处获取“B2C JWT 访问令牌”?