Перенос одного типа заявки с одного шага на другой в пользовательской политике B2 C - PullRequest
0 голосов
/ 17 января 2020

У меня есть политика сброса пароля, здесь я отправлю OTP пользователю, который запрашивает сброс пароля, если учетная запись существует. Вот мое путешествие пользователя:

<UserJourney Id="PasswordReset">
             <OrchestrationSteps>
                <OrchestrationStep Order="1" Type="ClaimsExchange">
                    <ClaimsExchanges>
                        <ClaimsExchange Id="PasswordResetUsingUserNameExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingUserName" />
                    </ClaimsExchanges>
                </OrchestrationStep>

                <OrchestrationStep Order="2" Type="ClaimsExchange">
                    <ClaimsExchanges>
                        <ClaimsExchange Id="PasswordReset-EmailVerification-Exchange" TechnicalProfileReferenceId="SelfAsserted-PasswordReset-CustomEmailVerification" />
                    </ClaimsExchanges>
                </OrchestrationStep>

                <OrchestrationStep Order="3" Type="ClaimsExchange">
                    <ClaimsExchanges>
                        <ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" />
                    </ClaimsExchanges>
                </OrchestrationStep>
                <OrchestrationStep Order="4" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
             </OrchestrationSteps>
             <ClientDefinition ReferenceId="DefaultWeb" />
        </UserJourney>

Сначала читает профиль и, если существует, отправляет OTP на электронную почту или телефон. Это прекрасно работает.

<TechnicalProfile Id="LocalAccountDiscoveryUsingUserName">
                    <DisplayName>Reset password using username</DisplayName>
                    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
                    <Metadata>
                        <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
                        <Item Key="ContentDefinitionReferenceId">api.localaccountpasswordreset</Item>
                        <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Your account has been locked. Contact your support person to unlock it, then try again.</Item>
                    </Metadata>
                    <CryptographicKeys>
                        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
                    </CryptographicKeys>
                    <IncludeInSso>false</IncludeInSso>
                    <OutputClaims>                        
                        <OutputClaim ClaimTypeReferenceId="signInName" Required="true" />
                        <OutputClaim ClaimTypeReferenceId="objectId" />
                        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
                        <OutputClaim ClaimTypeReferenceId="authenticationSource" />            
                    </OutputClaims>
                    <ValidationTechnicalProfiles>
                        <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingSignInUserName" />
                        <ValidationTechnicalProfile ReferenceId="FuncREST-WithPhoneUserName-OTP">
                            <Preconditions>                        
                                <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                                    <Value>signInNames.emailAddress</Value>
                                    <Action>SkipThisValidationTechnicalProfile</Action>
                                </Precondition>
                            </Preconditions>
                        </ValidationTechnicalProfile>

                        <ValidationTechnicalProfile ReferenceId="FuncREST-WithEmailUserName-OTP">
                            <Preconditions>                        
                                <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
                                    <Value>signInNames.emailAddress</Value>
                                    <Action>SkipThisValidationTechnicalProfile</Action>
                                </Precondition>
                            </Preconditions>
                        </ValidationTechnicalProfile>

                    </ValidationTechnicalProfiles>
                </TechnicalProfile>

В профиле чтения пользователя я добавил OutputClaimsTransformation , который создаст письмо только для чтения.

<TechnicalProfile Id="AAD-UserReadUsingSignInUserName">
                    <Metadata>
                        <Item Key="Operation">Read</Item>
                        <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
                        <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">An account could not be found for the provided user ID.</Item>
                    </Metadata>
                    <IncludeInSso>false</IncludeInSso>
                    <InputClaims>                       
                        <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" />
                        <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.phoneNumber" />
                    </InputClaims>
                    <OutputClaims>
                        <!-- Required claims -->
                        <OutputClaim ClaimTypeReferenceId="objectId" />
                        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
                        <!-- Optional claims -->
                        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
                        <OutputClaim ClaimTypeReferenceId="displayName" />
                        <OutputClaim ClaimTypeReferenceId="accountEnabled" />
                        <OutputClaim ClaimTypeReferenceId="otherMails" />
                        <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress"/>
                        <OutputClaim ClaimTypeReferenceId="signInNames.phoneNumber"/>
                        <OutputClaim ClaimTypeReferenceId="givenName" />
                        <OutputClaim ClaimTypeReferenceId="surname" />
                    </OutputClaims>
                    <OutputClaimsTransformations>
                        <OutputClaimsTransformation ReferenceId="AssertAccountEnabledIsTrue" />
                        <OutputClaimsTransformation ReferenceId="CreateReadonlyEmailClaimPasswordReset" />
                    </OutputClaimsTransformations>
                    <IncludeTechnicalProfile ReferenceId="AAD-Common" />
                </TechnicalProfile>

Затем в следующем На шаге он пытается получить доступ к «readonlyEmail», созданному ранее, но отображается пустым.

<TechnicalProfile Id="SelfAsserted-PasswordReset-CustomEmailVerification">
                    <DisplayName>Local Account E-mail Address Verification</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.localaccountsignup.verify</Item>
                        <!-- <Item Key="EnforceEmailVerification">true</Item> -->
                        <Item Key="language.button_continue">Next</Item>
                        <Item Key="setting.showCancelButton">false</Item>
                    </Metadata>
                    <InputClaims>
                        <InputClaim ClaimTypeReferenceId="readonlyEmail" />
                    </InputClaims>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="readonlyEmail" Required="true" />
                        <OutputClaim ClaimTypeReferenceId="otp" Required="true" />
                    </OutputClaims>

                    <ValidationTechnicalProfiles>
                        <ValidationTechnicalProfile ReferenceId="FuncREST-Email-OTP" />
                    </ValidationTechnicalProfiles>
                </TechnicalProfile>

1 Ответ

0 голосов
/ 18 января 2020

Добавить

<OutputClaim ClaimTypeReferenceId="readonlyEmail" />
в LocalAccountDiscoveryUsingUserName. Потому что заявки от VTP подвергаются следующему шагу оркестрации, только если они передаются через родительский TP.

...