0

我使用入门包创建了一个自定义登录流程(仅对我的广告租户进行了更改)。我在 Ad 中创建了一个新用户,使用临时密码,用户在首次登录时必须更改该密码。

当用户第一次登录时,会显示用户名/密码无效的错误,而不是进入密码重置页面。

我需要对自定义登录流程进行哪些更改以显示密码重置页面?

4

3 回答 3

0

在 B2C 登录流程中,您不能将新创建的用户与临时密码一起使用。对于流程,它不能重定向到用户更改密码页面。

于 2019-03-25T05:54:01.923 回答
0

如果可以使用 Azure AD Graph API 而不是使用 Azure 门户创建具有随机密码的新用户,则可以实施自定义策略来指示新用户重置随机密码。

要实现这一点,您必须创建自定义属性,例如ForceChangePasswordNextSignIn,将新用户的自定义属性设置为true,然后在登录流程中测试自定义属性,如下所示。

要将新用户的自定义属性设置为true

{
  "accountEnabled": true,
  "creationType": "LocalAccount",
  "displayName": "Alex Wu",
  "passwordProfile": {
    "password": "Test1234",
    "forceChangePasswordNextLogin": false
  },
  "signInNames": [
    {
      "type": "emailAddress",
      "value": "AlexW@example.com"
    }
  ],
  "extension_<b2cExtensionApplicationObjectIdWithoutHyphens>_ForceChangePasswordNextSignIn": true
}

要在登录流程中测试自定义属性:

  1. 声明表示自定义属性的声明类型。
<ClaimType Id="extension_ForceChangePasswordNextSignIn">
  <DisplayName>Force Change Password Next Sign-In</DisplayName>
  <DataType>boolean</DataType>
</ClaimType>
  1. 声明一个AssertBooleanClaimIsEqualToValue声明转换以确保自定义属性未设置为true(即新用户不必重置为随机密码)。
<ClaimsTransformation Id="EnsureForceChangePasswordNextSignInIsFalse" TransformationMethod="AssertBooleanClaimIsEqualToValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="extension_ForceChangePasswordNextSignIn" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="valueToCompareTo" DataType="boolean" Value="false" />
  </InputParameters>
</ClaimsTransformation>
  1. 从AAD-UserReadUsingEmailAddress技术配置文件的副本调用EnsureForceChangePasswordNextSignInIsFalse声明转换以测试自定义属性未设置为。true
<TechnicalProfile Id="AAD-UserReadUsingSignInName-EnsureForceChangePasswordNextSignInIsFalse">
  ...
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames" Required="true" />
  </InputClaims>
  <OutputClaims>
    ...
    <OutputClaim ClaimTypeReferenceId="extension_ForceChangePasswordNextSignIn" />
  </OutputClaims>
  <OutputClaimsTransformations>
    ...
    <OutputClaimsTransformation ReferenceId="EnsureForceChangePasswordNextSignInIsFalse" />
  </OutputClaimsTransformations>
</TechnicalProfile>
  1. 如果自定义属性设置为(即新用户确实必须重置为随机密码) ,则从 SelfAsserted-LocalAccountSignin-Email技术配置文件调用AAD-UserReadUsingSignInName-EnsureForceChangePasswordNextSignInIsFalse技术配置文件以显示错误消息。true
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
  ...
  <Metadata>
    ...
    <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Whoops, you have to change your admin-created password, so please click 'Forgot your password?'.</Item>
  </Metadata>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingSignInName-EnsureForceChangePasswordNextSignInIsFalse" />
    <ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
  </ValidationTechnicalProfiles>
  ...
</TechnicalProfile>
于 2019-03-25T10:02:19.513 回答
0

MS 提供了一个示例,描述了如何执行强制密码重置。见这里

这仅在您以编程方式创建用户时才有效。需要注意的一点是,您应该确保在创建用户时将 passwordProfile.ForceChangePasswordNextLogin 设置为 false。

于 2019-05-29T22:07:00.600 回答