Azure AD B2C自定义策略中如何区分长期密码与临时密码?
Azure AD B2C双密码类型判断的可行解决方案
方案一:使用隐藏声明存储明文密码副本(推荐)
保留密码输入框的密文显示特性,同时通过隐藏声明获取明文副本用于正则判断:
- 在
ClaimsSchema中添加一个隐藏的字符串类型声明,用于存储密码明文副本:<ClaimType Id="plaintextPasswordCopy"> <DisplayName>Plaintext Password Copy</DisplayName> <DataType>string</DataType> <UserInputType>Hidden</UserInputType> </ClaimType> - 创建声明转换,将用户输入的
password值复制到隐藏声明:<ClaimsTransformation Id="CopyPasswordToHiddenClaim" TransformationMethod="CopyClaim"> <InputClaims> <InputClaim ClaimTypeReferenceId="password" TransformationClaimType="inputClaim"/> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="plaintextPasswordCopy" TransformationClaimType="outputClaim"/> </OutputClaims> </ClaimsTransformation> - 在
LocalAccountSignUpWithLogonEmail技术配置文件中,先调用复制转换,再调用你的CheckIfLongTermPwd转换(修改转换逻辑,针对plaintextPasswordCopy做正则匹配):<InputClaimsTransformations> <InputClaimsTransformation ReferenceId="CopyPasswordToHiddenClaim"/> <InputClaimsTransformation ReferenceId="CheckIfLongTermPwd"/> </InputClaimsTransformations>
方案二:调整声明转换逻辑适配Password类型
如果AD B2C允许对Password类型声明直接执行字符串匹配,可修改CheckIfLongTermPwd的转换逻辑:
- 示例转换(判断密码长度是否≥12,同时可添加正则规则):
注:部分AD B2C环境可能对Password类型声明的字符串处理有限制,此方案需测试验证。<ClaimsTransformation Id="CheckIfLongTermPwd" TransformationMethod="AssertStringMatch"> <InputClaims> <InputClaim ClaimTypeReferenceId="password" TransformationClaimType="inputClaim"/> </InputClaims> <InputParameters> <InputParameter Id="matchPattern" Value="^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&]).{12,}$"/> <!-- 替换为你的长期密码正则 --> <InputParameter Id="ignoreCase" Value="false"/> <InputParameter Id="claimTypeToCreate" Value="isLongTermPwd"/> <InputParameter Id="outputClaimIfMatched" Value="true"/> <InputParameter Id="outputClaimIfNotMatched" Value="false"/> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="isLongTermPwd" TransformationClaimType="outputClaim"/> </OutputClaims> </ClaimsTransformation>
方案三:前端自定义判断传递标识
通过自定义UI页面的JavaScript提前判断密码类型,将结果传递给策略:
- 在自定义UI页面中添加监听密码输入的脚本,判断输入内容是否符合长期密码规则,生成
isLongTermPwd标识(true/false) - 在策略的
ClaimsSchema中添加隐藏声明:<ClaimType Id="isLongTermPwd"> <DisplayName>Is Long Term Password</DisplayName> <DataType>boolean</DataType> <UserInputType>Hidden</UserInputType> </ClaimType> - 在页面中将判断结果设置为隐藏表单字段的值,提交时传递给AD B2C,后续流程直接读取该声明执行分支逻辑
内容的提问来源于stack exchange,提问作者myself
相关产品推荐
相关产品推荐

