【发布时间】:2022-11-21 17:38:43
【问题描述】:
我正在使用 Microsoft Graph API 为用户设置自定义值(字符串)。 我试过同时使用开放和目录扩展来存储数据,并且两者似乎在 API 级别都运行良好,因为我能够将数据返回给用户。
接下来我要做的是将此扩展的价值纳入 B2C 自定义政策声明。我一直无法找到任何文档来说明如何在自定义策略中获取开放扩展的值,即使文档声明它是受支持的,所以我尝试使用目录扩展来做到这一点。
扩展名是 extension_{appId}_myString 并且是通过这个 HTTP 调用创建的:
POST https://graph.microsoft.com/v1.0/applications/graph-app-object-id/extensionProperties
{
"name": "myString",
"dataType": "String",
"targetObjects": [
"User"
]
}
我添加了声明类型定义如下:
<ClaimType Id="myString">
<DisplayName>This is my string</DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OpenIdConnect" PartnerClaimType="extension_myString" />
<Protocol Name="OAuth2" PartnerClaimType="extension_myString" />
</DefaultPartnerClaimTypes>
</ClaimType>
我的用户旅程定义:
<UserJourney Id="SignIn">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.selfasserted">
<ClaimsProviderSelections>
<ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninExchange" />
</ClaimsProviderSelections>
<ClaimsExchanges>
<ClaimsExchange Id="LocalAccountSigninExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingID" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
<ClientDefinition ReferenceId="DefaultWeb" />
</UserJourney>
我在第 1 步和第 2 步的技术配置文件中添加了此输出声明:
<OutputClaim ClaimTypeReferenceId="myString" PartnerClaimType="extension_myString" />
我的 AAD-Common 技术配置文件具有 b2c-extensions-app 客户端 ID 和对象 ID 元数据项,我能够成功完成身份验证过程并进入 JWT 屏幕,但我的扩展值未显示在那里。
我不明白我是不是做错了什么,或者只是错过了另一个应该添加自定义声明以使其显示在令牌中的地方。有没有某种方法可以“打印”声明的值以查看它是否存在于策略的运行时中?至少我知道价值在那里,我只需要把它放在代币中..
我不确定的另一件事是通过 Graph API 创建扩展值。我使用图形应用程序的凭据获取图形 API 令牌,还使用它的对象 ID 在用户对象上创建目录扩展。另一方面,有 b2c-extensions-app,它是在自定义策略运行时查询数据的应用程序。根据我的理解,这两个应用程序都针对同一个 Active Directory 实例工作,所以这应该不是问题,但也许我误解了一些东西。
【问题讨论】:
标签: azure-active-directory azure-ad-b2c azure-ad-b2c-custom-policy