B2C自定义策略调用Token端点报错:方法未实现
Azure AD B2C ROPC流程中设置声明值报错的解决方案
问题原因
在ROPC(资源所有者密码凭据)流程的Token端点调用时,Azure AD B2C不支持将使用ClaimsTransformationProtocolProvider的独立技术配置文件作为编排步骤。该协议提供者仅适用于交互式授权端点流程,非交互式的Token端点会因无法识别该操作而抛出The method or operation is not implemented错误。
正确配置方式
无需单独创建独立的声明转换技术配置文件,而是将声明转换逻辑合并到ROPC登录的技术配置文件中,具体步骤如下:
- 定义ClaimType(原有配置无需修改)
<BuildingBlocks> <ClaimsSchema> <ClaimType Id="isThisAvailable"> <DisplayName>Is This Available</DisplayName> <DataType>boolean</DataType> </ClaimType> </ClaimsSchema> </BuildingBlocks>
- 创建ClaimsTransformation(原有配置无需修改)
<BuildingBlocks> <ClaimsTransformations> <ClaimsTransformation Id="SetThisIsAvailableClaim" TransformationMethod="CreateStringClaim"> <InputParameters> <InputParameter Id="value" DataType="string" Value="false" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="isThisAvailable" TransformationClaimType="createdClaim" /> </OutputClaims> </ClaimsTransformation> </ClaimsTransformations> </BuildingBlocks>
- 修改ROPC登录技术配置文件
找到你原有流程中负责ROPC登录的技术配置文件(通常ID为ResourceOwnerPasswordCredentialsLogin),在其中添加OutputClaimsTransformations节点,将声明转换绑定到该步骤:
<ClaimsProviders> <ClaimsProvider> <DisplayName>Local Account</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="ResourceOwnerPasswordCredentialsLogin"> <DisplayName>Local Account ROPC Login</DisplayName> <Protocol Name="OpenIdConnect" /> <!-- 原有配置(InputClaims、OutputClaims等)保留 --> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="SetThisIsAvailableClaim" /> </OutputClaimsTransformations> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> </ClaimsProviders>
- 调整用户旅程
移除原有流程中单独添加的CheckIfThisIsAvailable编排步骤,保留原有的ROPC登录步骤即可——声明转换会在ROPC登录执行完成后自动触发,完成isThisAvailable声明的赋值。
验证
修改配置后重新上传策略,调用Token端点执行ROPC流程,即可正常获取包含isThisAvailable声明的令牌,同时授权端点的交互式流程也不受影响。
内容的提问来源于stack exchange,提问作者Patrice Cote
相关产品推荐
相关产品推荐

