我使用入门包创建了一个自定义登录流程(仅对我的广告租户进行了更改)。我在 Ad 中创建了一个新用户,使用临时密码,用户在首次登录时必须更改该密码。
当用户第一次登录时,会显示用户名/密码无效的错误,而不是进入密码重置页面。
我需要对自定义登录流程进行哪些更改以显示密码重置页面?
我使用入门包创建了一个自定义登录流程(仅对我的广告租户进行了更改)。我在 Ad 中创建了一个新用户,使用临时密码,用户在首次登录时必须更改该密码。
当用户第一次登录时,会显示用户名/密码无效的错误,而不是进入密码重置页面。
我需要对自定义登录流程进行哪些更改以显示密码重置页面?
在 B2C 登录流程中,您不能将新创建的用户与临时密码一起使用。对于流程,它不能重定向到用户更改密码页面。
如果可以使用 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
}
要在登录流程中测试自定义属性:
<ClaimType Id="extension_ForceChangePasswordNextSignIn">
<DisplayName>Force Change Password Next Sign-In</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
true(即新用户不必重置为随机密码)。<ClaimsTransformation Id="EnsureForceChangePasswordNextSignInIsFalse" TransformationMethod="AssertBooleanClaimIsEqualToValue">
<InputClaims>
<InputClaim ClaimTypeReferenceId="extension_ForceChangePasswordNextSignIn" TransformationClaimType="inputClaim" />
</InputClaims>
<InputParameters>
<InputParameter Id="valueToCompareTo" DataType="boolean" Value="false" />
</InputParameters>
</ClaimsTransformation>
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>
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 提供了一个示例,描述了如何执行强制密码重置。见这里。
这仅在您以编程方式创建用户时才有效。需要注意的一点是,您应该确保在创建用户时将 passwordProfile.ForceChangePasswordNextLogin 设置为 false。