Azure B2C:注册自定义策略中能否使用生成的临时密码?
Azure B2C自定义策略注册时系统生成随机密码的实现方案
是的,仅通过Azure B2C自定义策略就能实现注册账户时使用系统生成的随机密码,不用依赖Graph API。具体实现步骤如下:
定义生成随机密码的声明转换
先在自定义策略的ClaimsSchema里添加一个存储密码的声明,再通过GenerateRandomString类型的声明转换生成符合要求的随机密码。示例代码如下:<ClaimsSchema> <ClaimType Id="newPassword"> <DisplayName>New Password</DisplayName> <DataType>string</DataType> <UserHelpText>System-generated password</UserHelpText> </ClaimType> </ClaimsSchema> <ClaimsTransformations> <ClaimsTransformation Id="GenerateRandomPassword" TransformationMethod="GenerateRandomString"> <InputParameters> <InputParameter Id="randomGeneratorType" DataType="string" Value="DEFAULT" /> <InputParameter Id="length" DataType="int" Value="12" /> <!-- 包含大小写字母、数字和特殊字符,满足密码复杂度要求 --> <InputParameter Id="characterSet" DataType="string" Value="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="newPassword" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation> </ClaimsTransformations>创建调用转换的技术配置文件
写一个专门的技术配置文件,调用上面的声明转换来生成密码:<TechnicalProfile Id="GenerateRandomPasswordProfile"> <DisplayName>Generate Random Password</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="newPassword" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="GenerateRandomPassword" /> </OutputClaimsTransformations> </TechnicalProfile>修改注册用户旅程流程
在注册的用户旅程中,先添加一个步骤调用上述技术配置文件生成密码,再把生成的密码传递给创建用户的技术配置文件,同时移除原本需要用户输入密码的字段:<!-- 在用户旅程的编排步骤中添加生成密码的步骤 --> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="GeneratePassword" TechnicalProfileReferenceId="GenerateRandomPasswordProfile" /> </ClaimsExchanges> </OrchestrationStep> <!-- 修改注册用的技术配置文件,使用生成的密码 --> <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail"> <!-- 保留原有其他配置 --> <InputClaims> <InputClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password" /> </InputClaims> <!-- 删除原本的密码输入字段配置,避免用户输入 --> </TechnicalProfile>关键注意点
- 生成的密码必须符合你Azure B2C租户设置的密码复杂度规则,否则会创建用户失败。
- 如果需要把密码通知给用户,可以在流程里加邮件发送步骤,把密码作为内容包含在邮件里,注意要通过安全渠道发送。
- 这个方案适合不需要用户设置初始密码的场景,比如管理员批量创建用户、系统自动注册账户等。
内容的提问来源于stack exchange,提问作者Chaitu
相关产品推荐
相关产品推荐

