'Negative Scenario on login
During the login process, on the wrong password attempt, I need to change a few flags and attributes in the user directory before we throw any error in the user journey. How can we implement this as the user journey gets broken as soon as login-nonInteractive throws a password exception?
Solution 1:[1]
On
login-noninteractivetechnical profile called as Validation Technical profile from your Login Technical profile, set"ContinueOnError"="true"<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email"> <ValidationTechnicalProfiles> <ValidationTechnicalProfile ReferenceId="login-NonInteractive" "ContinueOnError"="true"/> </ValidationTechnicalProfiles> </TechnicalProfile>Inside
login-noninteractivetechnical profile, set adefaultValueforobjectId, eg"DefaultValue"="badPassword"<TechnicalProfile Id="login-NonInteractive"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid" "DefaultValue"="badPassword"/> </TechnicalProfile>In your Login Technical profile apply a precondition to the next validation technical profile, such that it only executes if
objectId!=badPassword. Here call a technical profile to perform the workload for the bad password scenario.<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email"> <ValidationTechnicalProfiles> <ValidationTechnicalProfile ReferenceId="login-NonInteractive" "ContinueOnError"="true"/> <ValidationTechnicalProfile ReferenceId="Run-Custom-BadPwd-Logic"> <Preconditions> <Precondition Type="ClaimEquals" ExecuteActionsIf="false"> <Value>objectId</Value> <Value>badPassword</Value> <Action>SkipThisValidationTechnicalProfile</Action> </Precondition> </Preconditions> </ValidationTechnicalProfile> </ValidationTechnicalProfiles> </TechnicalProfile>Now we need to stop the flow for bad password. Call another validation technical profile with a precondition
skip if objectId!=badPassword.<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email"> <ValidationTechnicalProfiles> <ValidationTechnicalProfile ReferenceId="login-NonInteractive" "ContinueOnError"="true"/> <ValidationTechnicalProfile ReferenceId="Run-Custom-BadPwd-Logic"> <Preconditions> <Precondition Type="ClaimEquals" ExecuteActionsIf="false"> <Value>objectId</Value> <Value>badPassword</Value> <Action>SkipThisValidationTechnicalProfile</Action> </Precondition> </Preconditions> </ValidationTechnicalProfile> <ValidationTechnicalProfile ReferenceId="Block-BadPwd-User"> <Preconditions> <Precondition Type="ClaimEquals" ExecuteActionsIf="false"> <Value>objectId</Value> <Value>badPassword</Value> <Action>SkipThisValidationTechnicalProfile</Action> </Precondition> </Preconditions> </ValidationTechnicalProfile> </ValidationTechnicalProfiles> </TechnicalProfile>This (Block-BadPwd-User) should call a claims transform technical profile, which performs a boolean assertion. First call a claim transform to compare
objectIdwith"badPassword", output a boolean claim (booleanBadPassword=true/false). The a second claim transform to comparebooleanBadPasswordwith a boolean (false). Use an AssertBooleanClaimIsEqualToValue transform here, which will throw an error if thebooleanBadPasswordis not equal tofalse.<TechnicalProfile Id="Block-BadPwd-User"> <DisplayName>Block-BadPwd-User</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="booleanBadPassword" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="compareObjectIdValue" /> <OutputClaimsTransformation ReferenceId="AssertValueIsFalse" /> </OutputClaimsTransformations> </TechnicalProfile><ClaimsTransformation Id="compareObjectIdValue" TransformationMethod="CompareClaimToValue"> <InputClaims> <InputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="inputClaim1" /> </InputClaims> <InputParameters> <InputParameter Id="compareTo" DataType="string" Value="badPassword" /> <InputParameter Id="operator" DataType="string" Value="equal" /> <InputParameter Id="ignoreCase" DataType="string" Value="true" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="booleanBadPassword" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation> <ClaimsTransformation Id="AssertValueIsFalse" TransformationMethod="AssertBooleanClaimIsEqualToValue"> <InputClaims> <InputClaim ClaimTypeReferenceId="booleanBadPassword" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="valueToCompareTo" DataType="boolean" Value="false" /> </InputParameters> </ClaimsTransformation>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Jas Suri - MSFT |
