我正在尝试更新密码重置用户旅程中的扩展属性(extension_StatusFlag)之一的值。我仅在且仅当extension_StatusFlag属性的值为MigratedNotActivated时才这样做。 extension_StatusFlag可能有4个不同的值。
我添加了带有前提条件的OrchestrationStep来检查extension_StatusFlag的值,如果条件满足,则仅调用技术档案来更新属性值。
已在PasswordReset用户旅程中的OrchestrationStep步骤下方添加
<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具有MigratedNotActivated值,但该OrchestrationStep仍未执行。 extension_StatusFlag的值保持不变。似乎无法更新属性值。 注意:我已经确保extension_StatusFlag属性在Claim Bag中,因为当用户完成密码重置并发出Cookie时,可以在返回的Claim中看到该属性。
我希望它可以将属性值保存为Active,但它没有这样做。看起来好像是一起跳过了,根本没有调用技术资料。
答案 0 :(得分:1)
总结了@chrispadgett提出的答案,并且效果很好。如果有人需要参考,那将很容易。 您可以仅在编排步骤
下使用<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="AAD-UserWriteAccountStatusUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
在该步骤中,您只需调用“编写技术资料”
<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" AlwaysUseDefaultValue="true" />
</PersistedClaims>
<IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>
注意:仅当您不想通过显示屏幕从用户那里收集任何信息时,此选项才适用。
答案 1 :(得分:0)
您必须将 AlwaysUseDefaultValue 属性添加到 PersistedClaim 元素:
<PersistedClaim ClaimTypeReferenceId="extension_StatusFlag" DefaultValue="Active" AlwaysUseDefaultValue="true" />
否则,如果 extension_StatusFlag 声明具有现有值(即MigratedNotActivated
),则不会将其替换为新值。