Я пытаюсь обновить значение одного из атрибутов расширения (extension_StatusFlag) в пути сброса пароля пользователя. Я хочу сделать это только тогда и только тогда, когда атрибут extension_StatusFlag имеет значение MigratedNotActivation. Может быть 4 возможных различных значения extension_StatusFlag.
Я добавил OrchestrationStep с предварительными условиями, чтобы проверить значение extension_StatusFlag, и если условие удовлетворяет, то вызывает только технический профиль для обновления значения свойства.
Добавили ниже шаг OrchestrationStep в пути пользователя PasswordReset
<OrchestrationStep Order="3" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>extension_StatusFlag</Value>
<Value>MigratedNotActivated</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="Update_extension_StatusFlagToActive" TechnicalProfileReferenceId="LocalAccountChange_extension_StatusFlagToActiveUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
Я создал технический профиль, как показано ниже:
<TechnicalProfile Id="LocalAccountChange_extension_StatusFlagToActiveUsingObjectId">
<DisplayName>Change extension_StatusFlag to active</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.localaccountpasswordreset</Item>
</Metadata>
<CryptographicKeys>
<Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
</CryptographicKeys>
<InputClaims>
<InputClaim ClaimTypeReferenceId="objectId" />
</InputClaims>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="AAD-UserWriteAccountStatusUsingObjectId" />
</ValidationTechnicalProfiles>
</TechnicalProfile>
Затем технический профиль проверки:
<TechnicalProfile Id="AAD-UserWriteAccountStatusUsingObjectId">
<Metadata>
<Item Key="Operation">Write</Item>
<Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<InputClaim ClaimTypeReferenceId="objectId" Required="true" />
</InputClaims>
<PersistedClaims>
<PersistedClaim ClaimTypeReferenceId="objectId" />
<PersistedClaim ClaimTypeReferenceId="extension_StatusFlag" DefaultValue="Active" />
</PersistedClaims>
<IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>
Моя проблема в том, что extension_StatusFlag имеет значение MigratedNotActivation, но этот шаг OrchestrationStep не выполняется. Значение extension_StatusFlag остается неизменным. Похоже, он не может обновить значение атрибута.
Примечание. Я позаботился о том, чтобы атрибут extension_StatusFlag находился в пакете с претензиями, потому что я вижу, что в возвращенных претензиях, когда пользователь завершил процедуру сброса пароля и выдается cookie.
Я ожидаю, что он сохранит значение атрибута в Active, но он этого не делает. Похоже, он пропускает все это вместе, а не вызывает технический профиль.