在未验证用户身份的应用中验证Azure B2C令牌

时间:2020-04-01 05:47:40

标签: azure active-directory jwt azure-ad-b2c

我有一个方案,用户可以从前端应用程序登录/注册Azure AD B2C。之后,他们将调用与此前端分开的API应用程序(带有JWT令牌)。要求是API应用程序验证用户的令牌并决定是否执行请求。我可以使用auth标头将JWT令牌从前端发送到API。我也可以在API中接收它。现在的挑战是要验证该令牌不会被中间人伪造,或者不会被持有它的人滥用。我知道每个令牌都带有时间戳,可以检查是否过期。但是,这还不够。我需要以某种方式针对Azure AD B2C进行检查。

更新:该API是基于NodeJs的Azure Functions应用

2 个答案:

答案 0 :(得分:2)

您可以在API应用程序中验证令牌的签名。令牌由非对称密钥签名。

AzureB2C中的每个用户流都有一个关联的元数据文档,其中包含有关标签“ jwks_uri”中键的所有详细信息

enter image description here

“ jwks_uri”:“ https://xxxxxx.b2clogin.com/xxxxxxxxx.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_pe”,

您可以从jwks_uri标记下的链接中获取密钥详细信息,并将其用于验证签名。另外请记住,这些键是旋转的,因此您需要每24小时获取最新一次。

样品:- https://github.com/azure-ad-b2c/samples/tree/master/policies/user_info

文档https://docs.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview

答案 1 :(得分:1)

请参见此sampleAPIUseOAuthBearerAuthentication的保护,以验证令牌的签名。所有Azure AD B2C令牌都是签名的JWT。该示例代码将找到您的策略+租户组合的元数据终结点,并使用公共密钥来确保令牌签名有效/未经修改并且已由私钥持有人(AAD B2C)签名