Azure AD B2C中向REST API声明交换传递PolicyId报错求助
解决Azure AD B2C REST技术配置文件传递PolicyId的"未定义"错误
我帮你搞定这个问题!你收到的policyId未定义错误是因为Azure AD B2C要求所有在技术配置文件中引用的声明类型(ClaimType)必须先在策略文件里明确定义,哪怕你要传递的是内置的{Policy:PolicyId}值也不例外。下面是具体的解决步骤:
1. 在TrustFrameworkExtensions.xml中定义policyId声明类型
找到文件里的<BuildingBlocks>节点,在<ClaimsSchema>下添加这个声明类型的定义:
<BuildingBlocks> <ClaimsSchema> <!-- 保留你已有的其他声明类型 --> <ClaimType Id="policyId"> <DisplayName>Policy Identifier</DisplayName> <DataType>string</DataType> <UserHelpText>The unique identifier of the policy that initiated the request.</UserHelpText> </ClaimType> </ClaimsSchema> </BuildingBlocks>
这一步是告诉AD B2C:policyId是一个合法的字符串类型声明,可用于传递数据。
2. 更新REST技术配置文件的InputClaim
回到你的REST技术配置文件部分,保留你原来的InputClaim配置即可——现在因为已经定义了policyId声明类型,AD B2C就不会再报错了:
<InputClaim ClaimTypeReferenceId="policyId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:PolicyId}" />
这里的{Policy:PolicyId}是AD B2C的内置策略变量,会自动替换为当前执行的自定义策略的ID,刚好满足你区分不同调用策略的需求。
额外注意事项
- 因为你所有的自定义策略都以TrustFrameworkExtensions.xml为BasePolicy,所以只需要在这个基础文件里定义一次
policyId声明类型,所有继承它的子策略都能直接使用这个配置,无需重复定义。 - 可以在REST API端做个简单验证,确认接收到的
policyId值是否符合预期的策略ID。
内容的提问来源于stack exchange,提问作者user3090407
相关产品推荐
相关产品推荐

