Azure B2C 无密码注册,仅使用自定义策略中的电子邮件

R4j*_*R4j 5 azure azure-active-directory azure-ad-b2c

我的系统需要在注册和登录时使用无密码和电子邮件身份验证。
这意味着用户只需输入电子邮件,然后系统会将一次性密码发送到该电子邮件并让用户登录(如果没有帐户)然而,只需使用该电子邮件默默地使用默认信息创建一个新的)
我尝试了此示例,它适用于现有的本地用户(使用电子邮件和密码)
是否有办法仅使用电子邮件创建本地用户?我的用户只看到输入电子邮件屏幕和输入密码屏幕。他们不需要填写其他任何东西。

Chr*_*ett 2

创建本地用户帐户时,必须设置密码属性,这就是示例流程提示新用户进行此操作的原因。

如果您不想提示这一点,则可以将密码属性设置为随机值,如下所示。

  1. 从LocalAccountSignUpWithLogonEmail技术配置文件中删除newPasswordreenterPassword声明作为输出声明:
<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
  ...
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
    <OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" />
    <OutputClaim ClaimTypeReferenceId="newUser" />

    <!-- Optional claims, to be collected from the user -->
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="givenName" />
    <OutputClaim ClaimTypeReferenceId="surName" />
  </OutputClaims>
  ...
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)
  1. 对于AAD-UserWriteUsingLogonEmail技术配置文件,添加输入声明转换以生成新密码,并将accountEnabled属性设置为false,以便新用户无法使用生成的密码登录:
<TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
  ...
  <InputClaimsTransformations>
    <InputClaimsTransformation ReferenceId="GenerateNewPassword" />
  </InputClaimsTransformations>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" Required="true" />
  </InputClaims>
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="accountEnabled" DefaultValue="false" AlwaysUseDefaultValue="true" />
    <PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
    <PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password"/>
    <PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration,DisableStrongPassword" />
    ...
  </PersistedClaims>
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)
  1. 声明accountEnabled声明如下:
<ClaimType Id="accountEnabled">
  <DisplayName>Account Enabled</DisplayName>
  <DataType>boolean</DataType>
</ClaimType>
Run Code Online (Sandbox Code Playgroud)
  1. 声明CreateRandomString类型的GenerateNewPassword声明转换,如下所示:
<ClaimsTransformation Id="GenerateNewPassword" TransformationMethod="CreateRandomString">
  <InputParameters>
    <InputParameter Id="randomGeneratorType" DataType="string" Value="GUID" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="newPassword" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
Run Code Online (Sandbox Code Playgroud)