如何在强制更改密码时制作自定义登录流程重置密码
How to make a Custom Login Flow reset password on Force Password Change
我已经使用入门包创建了自定义登录流程(仅针对我的广告租户进行了更改)。我在 Ad 中创建了一个新用户,并使用该用户在首次登录时强制更改的临时密码。
当用户第一次登录时,会显示 username/password 无效的错误,而不是转到密码重置页面。
我需要对自定义登录流程进行哪些更改才能显示密码重置页面?
在B2C登录流程中,不能使用临时密码新建的用户。对于流程,它不能重定向到用户更改密码页面。
如果可以 create a new user with a random password using the Azure AD Graph API,而不是使用 Azure 门户,那么您可以实施自定义策略来指示新用户重置随机密码。
要实现此功能,您必须 create a custom attribute,例如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
}
要在登录流程中测试自定义属性:
- 声明代表自定义属性的声明类型。
<ClaimType Id="extension_ForceChangePasswordNextSignIn">
<DisplayName>Force Change Password Next Sign-In</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
- 声明 an AssertBooleanClaimIsEqualToValue claims transformation 以确保自定义属性未设置为
true
(即新用户不必重置为随机密码)。
<ClaimsTransformation Id="EnsureForceChangePasswordNextSignInIsFalse" TransformationMethod="AssertBooleanClaimIsEqualToValue">
<InputClaims>
<InputClaim ClaimTypeReferenceId="extension_ForceChangePasswordNextSignIn" TransformationClaimType="inputClaim" />
</InputClaims>
<InputParameters>
<InputParameter Id="valueToCompareTo" DataType="boolean" Value="false" />
</InputParameters>
</ClaimsTransformation>
- 从 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>
- 从 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>
MS 提供了一个描述如何执行强制密码重置的示例。参见 Here。
这仅在您以编程方式创建用户时有效。需要注意的一点是,您应该确保在创建用户时将 passwordProfile.ForceChangePasswordNextLogin 设置为 false。
我已经使用入门包创建了自定义登录流程(仅针对我的广告租户进行了更改)。我在 Ad 中创建了一个新用户,并使用该用户在首次登录时强制更改的临时密码。
当用户第一次登录时,会显示 username/password 无效的错误,而不是转到密码重置页面。
我需要对自定义登录流程进行哪些更改才能显示密码重置页面?
在B2C登录流程中,不能使用临时密码新建的用户。对于流程,它不能重定向到用户更改密码页面。
如果可以 create a new user with a random password using the Azure AD Graph API,而不是使用 Azure 门户,那么您可以实施自定义策略来指示新用户重置随机密码。
要实现此功能,您必须 create a custom attribute,例如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
}
要在登录流程中测试自定义属性:
- 声明代表自定义属性的声明类型。
<ClaimType Id="extension_ForceChangePasswordNextSignIn">
<DisplayName>Force Change Password Next Sign-In</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
- 声明 an AssertBooleanClaimIsEqualToValue claims transformation 以确保自定义属性未设置为
true
(即新用户不必重置为随机密码)。
<ClaimsTransformation Id="EnsureForceChangePasswordNextSignInIsFalse" TransformationMethod="AssertBooleanClaimIsEqualToValue">
<InputClaims>
<InputClaim ClaimTypeReferenceId="extension_ForceChangePasswordNextSignIn" TransformationClaimType="inputClaim" />
</InputClaims>
<InputParameters>
<InputParameter Id="valueToCompareTo" DataType="boolean" Value="false" />
</InputParameters>
</ClaimsTransformation>
- 从 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>
- 从 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>
MS 提供了一个描述如何执行强制密码重置的示例。参见 Here。
这仅在您以编程方式创建用户时有效。需要注意的一点是,您应该确保在创建用户时将 passwordProfile.ForceChangePasswordNextLogin 设置为 false。