Azure B2C `id_token_hint`和自定义策略

hfsqlsce  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(202)

在Azure B2C中,以编程方式创建用户后,我想通过电子邮件向用户发送链接,以便他们可以设置密码。我使用我自己的电子邮件提供商,而不是B2C -所以我只需要一个URI,我可以包括在我的'欢迎'电子邮件。
该链接需要专门为他们,所以当他们点击它,他们不必重新输入他们的电子邮件地址,并做整个电子邮件验证过程。
我使用的是B2C自定义策略,根据文档,它应该允许我向这个名为id_token_hint的URL添加查询字符串。这是一个自签名的JWT令牌,其中包含我想要传递给我的策略的声明(在我的例子中,是email)。
我遵循这两个链接的指导/说明:

我正在为我的自签名证书托管.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。"*

我正在努力寻找下一步该尝试什么。知道我哪里做错了吗

ymdaylpp

ymdaylpp1#

除了指定ID令牌提示技术配置文件外,您还需要将声明作为输入声明添加到依赖方技术配置文件中:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUp" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="userId" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>

文档:https://learn.microsoft.com/en-us/azure/active-directory-b2c/id-token-hint#configure-your-policy

相关问题