如何使用自定义策略将“signInName”替换为“mail”以进行基于电子邮件的 2FA?

问题描述 投票:0回答:1

我使用 Microsoft 的此示例策略 作为使用电子邮件地址实施 2FA 的起点。 在示例策略中,他们在编排的第一步将 SignInName 值复制到 ReadOnlyClaim 声明中。

但是,我需要做的是使用 B2C 中的 Mail 字段,因此我试图弄清楚如何在编排早期将 Mail 字段复制到 ReadOnlyEmail 声明中,以便在执行基于电子邮件的 2FA。

编排的第 3 步是我们查询 AD 的其他字段。我能够在这一步中成功拉回 Mail 属性。

<OrchestrationStep Order="3" Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
      <Value>authenticationSource</Value>
      <Value>socialIdpAuthentication</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
  </ClaimsExchanges>
</OrchestrationStep>

因此,我创建了第 4 步,将 Mail 属性复制到 ReadOnlyEmail 字段中。 然而,似乎这个值永远不会被设置,我不明白为什么。

<OrchestrationStep Order="4" Type="ClaimsExchange">
  <ClaimsExchanges>
    <ClaimsExchange Id="AADCopyMailToReadOnlyEmail" TechnicalProfileReferenceId="TpCopyMailToReadOnlyEmail" />
  </ClaimsExchanges>
</OrchestrationStep>
<TechnicalProfile Id="TpCopyMailToReadOnlyEmail">
  <DisplayName>Copy the Mail attribute to the ReadOnlyEmail attribute.</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="mail" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="mail" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="CopyMailToReadOnlyEmail" />
  </OutputClaimsTransformations>
</TechnicalProfile>
  <ClaimsTransformation Id="CopyMailToReadOnlyEmail" TransformationMethod="FormatStringClaim">
   <InputClaims>
     <InputClaim ClaimTypeReferenceId="mail" TransformationClaimType="inputClaim" />
   </InputClaims>
   <InputParameters>
     <InputParameter Id="stringFormat" DataType="string" Value="{0}" />
   </InputParameters>
   <OutputClaims>
     <OutputClaim ClaimTypeReferenceId="readOnlyEmail" TransformationClaimType="outputClaim" />
   </OutputClaims>
 </ClaimsTransformation>

但是每次执行 EmailVerifyOnSignIn 技术配置文件时,readOnlyEmail 声明都会继续包含 SignInName,而不是我尝试覆盖它的 Mail 属性。

azure-ad-b2c azure-ad-b2c-custom-policy
1个回答
0
投票

如果在 TP 中执行 OutputClaimsTransformations,则还需要在 TP 中输出 OutputClaimsTransformations 值。

在TP中,添加:

<OutputClaim ClaimTypeReferenceId="readOnlyEmail" />
© www.soinside.com 2019 - 2024. All rights reserved.