azure-ad-b2c - 如何从 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。但是,我找不到任何关于入门包的示例或如何执行此操作的示例。我不需要这些声明本身,我只是打算将它们用作编排步骤中的先决条件。
解决方案
您可以使用此处提到的说明和示例从 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>
推荐阅读
- mongodb - 让查找带有objectId
- scala - rlike 语句时编写巨大的功能方式
- php - PHP7.3 on eregi
- excel - VBA:访问 IE 'Do While' 的自动化错误
- android - API 29 webview net::ERR_CLEARTEXT_NOT_PERMITTED
- c# - 如何安全地将可能的空值转换为整数
- mysql - 使用 5000 万个文档对 MySQL 到 MongoDB 数据库进行建模的性能问题
- ios - 如何使用表格中的固定单元格,然后使用下面的项目列表?
- sql - SQL 批量插入忽略第一个数据行
- c++ - 使用 ffmpeg 音频编码器 adpcm_adx 将音频编码到 matroska 容器