Azure B2C 访问令牌验证和自定义 JWT 令牌生成

问题描述 投票:0回答:2

对于 Spring Boot (API REST) + Angular 作为前端的 Web 应用程序,我们需要与 Azure B2C 集成以进行身份验证部分。

我正在阅读一些 Microsoft 文档,但我没有 Azure B2C 的经验。

需要验证从 Azure 上的客户端应用程序 (Angular) 获取的访问令牌,然后使用从数据库获取的用户角色和权限生成(从 Java 应用程序)自定义 JWT 令牌(ID 令牌)。我们无法将角色放在 Azure AD 上。

此时客户端(Angular)和服务器(API REST)只会使用此令牌来处理 API 调用。

我不明白的是如何通过Spring框架验证Azure Access Token。应该调用哪个 Microsoft Web 服务以及如何调用(哪个库)

提前致谢。

angular azure spring-security azure-ad-msal azure-ad-b2c
2个回答
0
投票

我认为这个问题的答案应该让您开始:如何在 Java 中验证从 Azure AD B2C 生成的 JWT 令牌?

AD B2C 访问令牌“只是”一个 oauth2 令牌,因此任何可以验证 oauth2 的库都应该这样做。

编辑(还不能发表评论): 我认为这个链接(在另一个答案中链接)是您最好的开始:https://learn.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview。无论如何,您需要特定于租户的 url 来获取正确的密钥,例如 https://contoso.b2clogin.com/contoso.onmicrosoft.com/b2c_1_signupsignin1/discovery/v2.0/keys 而不是通用的 Microsoft 密钥.

或者,您可以查看 Microsoft 的 java 和 b2c 示例应用程序,该应用程序使用 msal for java:https://github.com/Azure-Samples/ms-identity-java-webapp/tree/master/msal-b2c -网络样本


0
投票

默认情况下,Azure B2C JWT 不符合规范。对于表示相同 iss 声明的 2 个令牌,jwks_uri 可能有所不同。这些令牌中有一个针对所使用的策略/用户流的附加声明。要获取正确的 jwks_uri,需要使用此策略/用户流查询发现端点。 jwks_uri 响应将是正确的,并且可用于初始化 JwtDecoder。 对于如下所示的 IssuerUri:https://something.b2clogin.com/something.onmicrosoft.com/b2c_1_signupsignin1/discovery/v2.0/keys jwt 令牌的发行者将不包含 b2c_1_signupsignin1 位。这将在单独的索赔中。如果您有多个策略/用户流,您可以为它们配置单独的 jwks_uri。 最令人困惑的是,您可以将 B2C 配置为符合规范(意味着 iss 声明发现端点返回相同的 jwks_uri),然后您确实可以使用标准库。

© www.soinside.com 2019 - 2024. All rights reserved.