При редактировании профиля Azure Ad B2C не удается удалить заявку

Я столкнулся с проблемой, когда мои пользователи заходят на страницу редактирования профиля и удаляют значения для некоторых утверждений, которые не требуются.

Например...

Если бы для Claim giveName было значение Test и пользователь удалил его, теперь значение будет или string.empty.

Однако после завершения пути RP по-прежнему передает исходное значение Test обратно в приложение, а также не сохраняет пустую строку в Azure AD.

Вот соответствующие технические профили:

<TechnicalProfile Id="UpdateConsumerInformation">
          <DisplayName>Business Information</DisplayName>
          <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
          <Metadata>
            <Item Key="ContentDefinitionReferenceId">api.selfasserted.profileupdate</Item>
            <Item Key="language.button_continue">Continue</Item>
          </Metadata>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="givenName" />
            <InputClaim ClaimTypeReferenceId="surName" />
            <InputClaim ClaimTypeReferenceId="extension_Company" />
            <InputClaim ClaimTypeReferenceId="streetAddress" />
            <InputClaim ClaimTypeReferenceId="extension_streetAddress2" />
            <InputClaim ClaimTypeReferenceId="city" />
            <InputClaim ClaimTypeReferenceId="state" />
            <InputClaim ClaimTypeReferenceId="postalCode" />
            <InputClaim ClaimTypeReferenceId="country" />
            <InputClaim ClaimTypeReferenceId="extension_Company" />
            <InputClaim ClaimTypeReferenceId="extension_Phone" />
            <InputClaim ClaimTypeReferenceId="extension_Consent" />
          </InputClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="givenName" Required="true" />
            <OutputClaim ClaimTypeReferenceId="surName" Required="true" />
            <OutputClaim ClaimTypeReferenceId="extension_Company" Required="false" />
            <OutputClaim ClaimTypeReferenceId="streetAddress" />
            <OutputClaim ClaimTypeReferenceId="extension_streetAddress2" />
            <OutputClaim ClaimTypeReferenceId="city" />
            <OutputClaim ClaimTypeReferenceId="state" />
            <OutputClaim ClaimTypeReferenceId="postalCode" />
            <OutputClaim ClaimTypeReferenceId="country" Required="true" />
            <OutputClaim ClaimTypeReferenceId="extension_Phone" />
            <OutputClaim ClaimTypeReferenceId="extension_Consent" Required="true" />
          </OutputClaims>
          <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="WriteConsumerInformation" />
          </ValidationTechnicalProfiles>
        </TechnicalProfile>
        <TechnicalProfile Id="WriteConsumerInformation">
          <DisplayName>Customer Information</DisplayName>
          <Metadata>
            <Item Key="Operation">Write</Item>
            <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">false</Item>
          </Metadata>
          <IncludeInSso>false</IncludeInSso>
          <InputClaimsTransformations>
            <InputClaimsTransformation ReferenceId="CreateDisplayNameFromFirstNameAndLastName" />
          </InputClaimsTransformations>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" Required="true" />
          </InputClaims>
          <PersistedClaims>
            <PersistedClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" />
            <PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />
            <PersistedClaim ClaimTypeReferenceId="givenName" />
            <PersistedClaim ClaimTypeReferenceId="surName" />
            <PersistedClaim ClaimTypeReferenceId="streetAddress" />
            <PersistedClaim ClaimTypeReferenceId="extension_streetAddress2" />
            <PersistedClaim ClaimTypeReferenceId="city" />
            <PersistedClaim ClaimTypeReferenceId="state" />
            <PersistedClaim ClaimTypeReferenceId="postalCode" />
            <PersistedClaim ClaimTypeReferenceId="country" />
            <PersistedClaim ClaimTypeReferenceId="extension_Consent" />
            <PersistedClaim ClaimTypeReferenceId="extension_Company" />
            <PersistedClaim ClaimTypeReferenceId="extension_Phone" />
          </PersistedClaims>
          <IncludeTechnicalProfile ReferenceId="AAD-Common" />
        </TechnicalProfile>

Я ожидал, что если пользователь очистит содержимое одного из утверждений, это утверждение будет очищено в azure ad b2c, и RP не вернет исходное значение.


person Christopher Norris    schedule 03.07.2020    source источник
comment
Вы пробовали использовать непустые строки? Они сохраняются? Можете ли вы поделиться своими полными файлами RP и базовыми политиками?   -  person Alfredo R    schedule 03.07.2020
comment
Привет, Альфредо, да, непустые строки сохраняются.   -  person Christopher Norris    schedule 06.07.2020


Ответы (1)


Используйте AllowGenerationOfClaimsWithNullValues элемент метаданных в техническом профиле UpdateConsumerInformation.

<TechnicalProfile Id="UpdateConsumerInformation">
          ...
          <Metadata>
            <Item Key="AllowGenerationOfClaimsWithNullValues">true</Item>
            <Item Key="ContentDefinitionReferenceId">api.selfasserted.profileupdate</Item>
            <Item Key="language.button_continue">Continue</Item>
          </Metadata>
          <InputClaims>
            ...
          </InputClaims>
          <OutputClaims>
            ...
          </OutputClaims>
    <ValidationTechnicalProfiles>
        <ValidationTechnicalProfile ReferenceId="WriteConsumerInformation" />
    </ValidationTechnicalProfiles>
</TechnicalProfile>
person Allen Wu    schedule 06.07.2020