You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,同时可添加正则规则):
    <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>
    
    注:部分AD B2C环境可能对Password类型声明的字符串处理有限制,此方案需测试验证。

方案三:前端自定义判断传递标识

通过自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:47:36