msal.js 访问令牌中的自定义声明

2024-05-22

我使用 msal.js 保护了我的 Angular 7 应用程序。我创建了一个自定义策略,该策略返回 id_token 和 access_token 中的自定义声明类型。为了实现这一目标,我一直在遵循本教程:https://learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-custom-rest-api-netfw https://learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-custom-rest-api-netfw。当我使用acquireTokenSilent()msal.js 方法中,JWT 令牌不包含自定义声明(合约、fileUploadAllowed)。

当我使用 Azure 中“自定义策略”窗格上的“立即运行”按钮时,我确实收到了包含自定义声明的 access_token。

JWT 令牌的有效负载是通过在 Azure 中运行策略生成的(更改了一些值):

{
  "iss": "https://login.microsoftonline.com/guid/v2.0/",
  "exp": 1548416392,
  "nbf": 1548455092,
  "aud": "c152h904-835a-496f-8919-e74f5013374c",
  "contract": "Contract03",
  "fileUploadAllowed": false,
  "sub": "25a6ec11-16fd-477a-8917-e0728c69e1db",
  "nonce": "defaultNonce",
  "scp": "portal.read user_impersonation",
  "azp": "c154c904-835a-496f-8919-e74f5087384c",
  "ver": "1.0",
  "iat": 1542213053
}

msal.js 生成的 JWT 令牌 (access_token) 的有效负载:

{
  "iss": "https://login.microsoftonline.com/guid/v2.0/",
  "exp": 1548416396,
  "nbf": 1548455092,
  "aud": "c152h904-835a-496f-8919-e74f5013374c",
  "sub": "25a6ec11-16fd-477a-8917-e0728c69e1db",
  "nonce": "e6df86c9-7c19-4cb5-a4ac-1aa2a89b1951",
  "scp": "portal.read user_impersonation",
  "azp": "c154c904-835a-496f-8919-e74f5087384c",
  "ver": "1.0",
  "iat": 1542213953
}

我想接收 msal.js 生成的 access_token 中的自定义声明。有谁知道我应该做什么才能使这项工作成功?

谢谢。


我们最近遇到了这个完全相同的问题。就像您一样,我们已经实现了自己的自定义 B2C 策略,该策略将从我们的 REST API 获取一些自定义声明并将它们注入到我们的 JWT 令牌中。当使用“立即运行”在 Azure 中进行测试时,我们会在 ID 令牌和访问令牌中看到所有自定义声明。但在我们使用 MSAL Angular 的 SPA 中,每次我们默默获取访问令牌时,它们都会丢失我们所有的自定义声明。

经过一些研究,我们发现问题在于我们的自定义声明都没有保留在 AD 会话中,因此是缺少自定义声明的原因。

我们通过覆盖“SM-AAD“我们的技术简介TrustFrameworkExtensions文件并指定我们想要在会话中保留哪些声明,例如您必须将自定义声明添加到坚持索赔收藏。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

msal.js 访问令牌中的自定义声明 的相关文章

随机推荐