如何从 id_token_hint 中提取多个值到特定声明中?

How to extract multiple values from id_token_hint into specific claims?

我有一个 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。但是,我找不到有关入门包的任何示例或如何执行此操作的示例。我不需要这些声明本身,我只是打算将它们用作编排步骤中的前提条件。

您可以使用此处提到的说明和示例从 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>