0

我们正在使用 B2C 自定义策略。我们有一个验证函数,在用户浏览完自我声明页面后在注册时调用。如果电子邮件与本地用户数据库匹配,这将返回扩展声明已验证。此时它还会返回用户的手机号码。

如果电子邮件不匹配,我们将进行 PhoneFactor 代码验证。

我现在想更新 extension_Verified 标志,但我找不到这样做的方法。

我可以创建一个新声明,但我无法根据这两个声明设置登录的先决条件(如果 Verified 为 false,则希望验证移动设备)。

我尝试过使用声明转换,但这些似乎只适用于字符串声明(extension_Verified 是布尔值)。

我曾尝试使用 PartnerClaimType="extension_MobileVerified" 但它似乎没有得到更新。

<TechnicalProfiles>
    <TechnicalProfile Id="PhoneFactor-InputOrVerify">
      <DisplayName>PhoneFactor</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.PhoneFactorProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ContentDefinitionReferenceId">api.phonefactor</Item>
        <Item Key="ManualPhoneNumberEntryAllowed">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
      </CryptographicKeys>
      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="CreateUserIdForMFA" />
      </InputClaimsTransformations>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="userIdForMFA" PartnerClaimType="UserId" />
        <InputClaim ClaimTypeReferenceId="extension_MemberMobile"/>
        <InputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber"/>
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" PartnerClaimType="Verified.OfficePhone"/>
        <!-- OfficePhone -->
        <OutputClaim ClaimTypeReferenceId="newPhoneNumberEntered" PartnerClaimType="newPhoneNumberEntered"/>
        <OutputClaim ClaimTypeReferenceId="extension_MobileVerified" DefaultValue="true" />
      </OutputClaims>

      <UseTechnicalProfileForSessionManagement ReferenceId="SM-MFA" />
    </TechnicalProfile>

这确实会显示手机号码而不允许输入并返回新的索赔。

如何更新现有的索赔?

4

1 回答 1

1

我对自定义属性有类似的问题。我按照步骤在此处添加自定义属性。 以下是一些实现相同目的的示例。

我必须确保从上一步正确传递了声明,因此在上一步中添加了 AAD-UserReadUsingObjectId。下面是我的代码

</OrchestrationStep>
       <OrchestrationStep Order="3" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="4" Type="ClaimsExchange">
      <Preconditions>
        <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
          <Value>extension_forceChange</Value>
          <Value>true</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <ClaimsExchanges>
        <ClaimsExchange Id="NewCredentials1" TechnicalProfileReferenceId="LocalAccountWritePasswordChangeUsingObjectId" />
      </ClaimsExchanges>
    </OrchestrationStep>

我也提到了这个来解决我的问题。

于 2018-08-21T18:21:38.553 回答