Azure AD B2C密码重置策略,无需电子邮件验证步骤

时间:2018-04-19 14:28:50

标签: azure-ad-b2c identity-experience-framework

是否可以创建自定义策略以重置已知电子邮件的密码?

我使用Graph API创建用户并将邀请电子邮件发送到指定的电子邮件 地址。

我希望用户点击该电子邮件中的链接,只需为其帐户设置密码。

我可以使用此电子邮件声明创建签名令牌,并将断言发送到我的自定义策略。所以政策将电子邮件作为输入声明。我在追踪中看到了它。

但是我无法在密码重置过程中绕过电子邮件验证步骤 - 当我删除它时,我得到500服务器错误而没有其他详细信息。

我也尝试将userId作为输入声明发送给用户,但它也无济于事。

有没有办法跳过电子邮件验证?

1 个答案:

答案 0 :(得分:3)

您有以下可改变用户体验的选项:

  1. 将电子邮件地址显示为只读字段,并删除电子邮件验证要求。
  2. 删除电子邮件验证步骤。
  3. 将电子邮件地址显示为只读字段

    1)创建readOnlyEmail声明类型:

    <ClaimType Id="readOnlyEmail">
      <DisplayName>Email Address</DisplayName>
      <DataType>string</DataType>
      <UserInputType>Readonly</UserInputType>
    </ClaimType>
    

    2)创建从email声明复制到readOnlyEmail声明的声明转换:

    <ClaimsTransformation Id="CopyFromEmailToReadOnlyEmail" TransformationMethod="FormatStringClaim">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim" />
      </InputClaims>
      <InputParameters>
        <InputParameter Id="stringFormat" DataType="string" Value="{0}" />
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="readOnlyEmail" TransformationClaimType="outputClaim" />
      </OutputClaims>
    </ClaimsTransformation>
    

    3)将CopyFromEmailToReadOnlyEmail声明转换添加为LocalAccountDiscoveryUsingEmailAddress技术配置文件的输入声明转换,然后将email声明类型替换为readOnlyemail作为输入和输出声明此技术资料:

    <TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
      <DisplayName>Reset password using email address</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
        <Item Key="ContentDefinitionReferenceId">api.localaccountpasswordreset</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
      </CryptographicKeys>
      <IncludeInSso>false</IncludeInSso>
      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="CopyFromEmailToReadOnlyEmail" />
      </InputClaimsTransformations>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="readOnlyEmail" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="readOnlyEmail" Required="true" />
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" />
      </OutputClaims>
      <ValidationTechnicalProfiles>
        <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress" />
      </ValidationTechnicalProfiles>
    </TechnicalProfile>
    

    删除电子邮件验证步骤

    1)更改PasswordReset旅程的第一步:

    <OrchestrationStep Order="1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" />
      </ClaimsExchanges>
    </OrchestrationStep>
    

    为:

    <OrchestrationStep Order="1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="UserReadUsingEmailAddressExchange" TechnicalProfileReferenceId="AAD-UserReadUsingEmailAddress" />
      </ClaimsExchanges>
    </OrchestrationStep>