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

时间:2019-01-25 11:06:20

标签: angular azure azure-active-directory azure-ad-b2c msal.js

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

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

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

{
  "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中接收自定义声明。有人知道我应该怎么做才能使这项工作吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

我们已通过覆盖TrustFrameworkExtensions文件中的“ SM-AAD ”技术资料并指定我们希望在会话中保留的声明来解决此问题。您必须将自定义声明添加到 PersistedClaims 集合中。

希望这会有所帮助。