在Azure B2C中,以编程方式创建用户后,我想通过电子邮件向用户发送链接,以便他们可以设置密码。我使用我自己的电子邮件提供商,而不是B2C -所以我只需要一个URI,我可以包括在我的'欢迎'电子邮件。
该链接需要专门为他们,所以当他们点击它,他们不必重新输入他们的电子邮件地址,并做整个电子邮件验证过程。
我使用的是B2C自定义策略,根据文档,它应该允许我向这个名为id_token_hint
的URL添加查询字符串。这是一个自签名的JWT令牌,其中包含我想要传递给我的策略的声明(在我的例子中,是email
)。
我遵循这两个链接的指导/说明:
- https://learn.microsoft.com/en-us/azure/active-directory-b2c/id-token-hint
- https://github.com/azure-ad-b2c/samples/tree/master/policies/invite
我正在为我的自签名证书托管.well-known
端点-并且可以在测试时看到B2C正在调用这两个端点。
我的问题是,我无法获得使用我嵌入到id_token_hint
JWT令牌中的电子邮件的策略。
我有一个技术配置文件来消耗它...
<TechnicalProfile Id="IdTokenHint_ExtractClaims">
<DisplayName>My ID Token Hint TechnicalProfile</DisplayName>
<Protocol Name="None" />
<Metadata>
<Item Key="METADATA">https://<my-domain>/.well-known/openid-configuration</Item>
<Item Key="issuer">https://localhost/</Item>
</Metadata>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
</OutputClaims>
</TechnicalProfile>
我从我的用户之旅中引用了它
<OrchestrationStep Order="1" Type="GetClaims" CpimIssuerTechnicalProfileReferenceId="IdTokenHint_ExtractClaims" />
从用户旅程中引用(即。使用CpimIssuerTechnicalProfileReferenceId
),这就是上面的文档所说的,不允许我在下一个技术概要中将该电子邮件添加为<InputClaim>
。然后,当尝试上载时,它会给出此验证错误...
- “声明类型“email”是依赖方技术配置文件的输出声明,但它不是用户旅程“DanTest”的任何步骤中的输出声明。"*
尽管如此,它 * 是 * IdTokenHint_ExtractClaims
的输出声明!
如果我将业务流程步骤更改为如下所示…
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="IdTokenHint_ExtractClaims" TechnicalProfileReferenceId="IdTokenHint_ExtractClaims" />
</ClaimsExchanges>
</OrchestrationStep>
然后成功上传。然而,我得到一个运行时错误,说这...
- “已尝试为ID为“www.example.com“的租户解析ID为“B2C_1A_dantest”的策略中ID为“IdTokenHint_ExtractClaims”的技术配置文件中不支持的协议“None”的协议处理程序mytenant.onmicrosoft.com。"*
我正在努力寻找下一步该尝试什么。知道我哪里做错了吗
1条答案
按热度按时间ymdaylpp1#
除了指定ID令牌提示技术配置文件外,您还需要将声明作为输入声明添加到依赖方技术配置文件中:
文档:https://learn.microsoft.com/en-us/azure/active-directory-b2c/id-token-hint#configure-your-policy