首页 > 解决方案 > 如何从 id_token_hint 中提取多个值到特定的声明中?

问题描述

我有一个 id_token_hint 带有来自https://sts.windows.net/的令牌。我愿意根据令牌中存在的角色将其用作受信任方。这是一个 JWT 令牌示例:

{
  "iss": "https://sts.windows.net/00000000-0000-0000-0000-000000000000/",
  "iat": 1610050840,
  "nbf": 1610050840,
  "exp": 1610054740,
  "aio": "E2JgYPi646//0000000000000000000=",
  "app_displayname": "my_app_displayname",
  "appid": "00000000-0000-0000-0000-000000000000",
  "appidacr": "1",
  "idp": "https://sts.windows.net/00000000-0000-0000-0000-000000000000/",
  "idtyp": "app",
  "oid": "00000000-73e4-46ae-b464-000000000000",
  "rh": "0.AAAAiKphxJIQoUmmKLTdWWDB80kfo3ST3nNJgG0000000000000.",
  "roles": [
    "Mail.Send",
    "Policy.ReadWrite.TrustFramework"
  ],
  "sub": "00000000-73e4-46ae-b464-000000000000",
  "tenant_region_scope": "EU",
  "tid": "00000000-0000-0000-0000-000000000000",
  "uti": "jDVAsZtcd0ezvvkFN00000",
  "ver": "1.0",
  "xms_tcdt": 1599800000
}

正如您在此处看到的,我有一个字段角色,其中包含角色数组。我正在尝试将此数组解析为特定声明,例如 IsPolicyReadWriteRole 和 IsMailSendRole。但是,我找不到任何关于入门包的示例或如何执行此操作的示例。我不需要这些声明本身,我只是打算将它们用作编排步骤中的先决条件。

标签: azure-ad-b2cazure-ad-b2c-custom-policy

解决方案


您可以使用此处提到的说明和示例从 id_token_hint 中提取声明 - https://docs.microsoft.com/en-us/azure/active-directory-b2c/id-token-hint

然后您可以使用 getsingleitemfromstringcollection 声明转换来获取声明值。 https://docs.microsoft.com/en-us/azure/active-directory-b2c/stringcollection-transformations#getsingleitemfromstringcollection

然后您可以使用 claimExist 或 claimEquals 谓词来测试该值。

id_token_hint 验证技术配置文件如下所示

<ClaimsProvider>
      <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="TpEngine_IdTokenHint_ExtractClaims">
          <DisplayName>Trustframework Policy Engine ID Token Hint Setup Technical Profile</DisplayName>
          <Protocol Name="None" />
          <Metadata>
            <Item Key="METADATA">https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration</Item>
          </Metadata>
        </TechnicalProfile>        
      </TechnicalProfiles>
    </ClaimsProvider>

推荐阅读