Azure ad b2c Azure B2C:使用“将密码重置旅程中的用户密码与电子邮件前缀进行比较”;“比较目标”;变换法

Azure ad b2c Azure B2C:使用“将密码重置旅程中的用户密码与电子邮件前缀进行比较”;“比较目标”;变换法,azure-ad-b2c,azure-ad-b2c-custom-policy,Azure Ad B2c,Azure Ad B2c Custom Policy,我希望通过声明转换满足密码复杂性要求。当用户经历密码重置过程时,我希望通过将newPassword声明与包含用户电子邮件前缀的扩展属性(如中的jdoe)进行比较,来释放与用户名类似的密码jdoe@contoso.com. 我不想使用REST技术配置文件 债权转换 <ClaimsTransformation Id="CheckUserSuppliedPassword" TransformationMethod="CompareClaims">

我希望通过声明转换满足密码复杂性要求。当用户经历密码重置过程时,我希望通过将newPassword声明与包含用户电子邮件前缀的扩展属性(如中的jdoe)进行比较,来释放与用户名类似的密码jdoe@contoso.com. 我不想使用REST技术配置文件

债权转换

  <ClaimsTransformation Id="CheckUserSuppliedPassword" TransformationMethod="CompareClaims">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="newPassword" TransformationClaimType="inputClaim1" />
      <InputClaim ClaimTypeReferenceId="userEmailPrefix" TransformationClaimType="inputClaim2" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="operator" DataType="string" Value="NOT EQUAL" />
      <InputParameter Id="ignoreCase" DataType="string" Value="true" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="SameAsEmailPrefix" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>

我添加了另一个调用转换的技术配置文件(MyLocalAccountCheckUserPassword)。此技术配置文件用作验证技术配置文件,在本地帐户索赔提供程序的“LocalAccountWritePasswordUsingObjectId”技术配置文件中引用。下面是两个技术概要

<TechnicalProfile Id="MyLocalAccountCheckUserPassword">
  <DisplayName>Check User Password</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
  <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="newPassword" Required="true" />
    <InputClaim ClaimTypeReferenceId="reenterPassword" Required="false" />
  </InputClaims>
  
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="newPassword"/>
    <OutputClaim ClaimTypeReferenceId="reenterPassword" />
    <OutputClaim ClaimTypeReferenceId="SameAsEmailPrefix"/>
  </OutputClaims>

  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="CheckUserSuppliedPassword"/>
  </OutputClaimsTransformations>
</TechnicalProfile>


    <TechnicalProfile Id="LocalAccountWritePasswordUsingObjectId">
      <DisplayName>Change password (username)</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ContentDefinitionReferenceId">api.localaccountpasswordreset</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
      </CryptographicKeys>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="objectId" />

        <InputClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" />

  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
    <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
    <OutputClaim ClaimTypeReferenceId="sameAsEmailPrefix" Required="true" />
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="AAD-UserWritePasswordUsingObjectId" />
    <ValidationTechnicalProfile ReferenceId="MyLocalAccountCheckUserPassword" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>

检查用户密码
真的
假的
更改密码(用户名)
api.localaccountpasswordreset
现在,我只想验证SameAsEmailMessage声明中的内容(true/false),看看比较是否如预期的那样进行。因此,我将其作为输出声明添加到依赖方技术概要中。但在密码重置过程完成后,它不会显示为声明。最后,我想在本地帐户登录屏幕上向用户显示一条错误消息


请提供帮助。

在自定义策略文件的relyingparty部分将SameAsEmailPrefix添加为输出声明。

将其添加为LocalAccountWritePasswordUsingObjectId中的输出声明要执行总体逻辑,请在AAD UserWritePasswordUsingObjectId VTP之前调用声明转换。然后添加另一个声明转换TP以确认SameAsEmailPrefix为FALSE。这个CT也可以返回错误。使用这些概念的一个很好的参考示例是谢谢Jas。我正在看样品,它看起来会对我有用。但是,我还没有抓住示例中实际阻止用户在密码重置期间设置相同(旧)密码的部分。你能给我指一下方向吗?嘿,贾斯,谢谢你到目前为止的帮助。但是,我仍然无法阻止用户重置相同的密码。如有任何见解,将不胜感激。