在身份验证失败时继续 Azure B2C 用户之旅
Continue Azure B2C user journey on authentication failure
我正在使用 Azure B2C 身份体验框架创建自定义用户旅程。我的问题是我想在身份验证失败时继续用户旅程。但是,似乎将身份验证失败解释为异常,从而导致旅程终止。
此旅程旨在适应从旧身份提供商到 B2C 的即时帐户迁移过程。
我要实现的流程是:
- 尝试使用 B2C 登录表单进行身份验证
- 身份验证失败时,查询 REST API 以确定用户的电子邮件地址是否存在于遗留系统中
- 如果电子邮件地址存在,则向用户提供 B2C 注册表单
这种情况有可能吗?
我不确定是否有办法在完全身份验证失败时继续,但如果仅检查用户帐户是否存在就足够了,您可能不需要这样做。
您可以在不尝试验证的情况下检查输入的用户名是否存在于B2C中。如果目录中不存在用户,则将 RaiseErrorIfClaimsPrincipalDoesNotExist 元数据设置为 false 允许 B2C 策略继续。然后您可以使用输入的用户名并继续使用其他技术配置文件。
我使用以下代码片段作为验证技术配置文件,如果找到对象 ID,我 运行 login-NonInteractive 配置文件,如果没有,我 运行 自定义身份验证配置文件
<TechnicalProfile Id="AAD-UserReadUsingEmailAddress-NoError">
<Metadata>
<Item Key="Operation">Read</Item>
<Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">false</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" />
</InputClaims>
<OutputClaims>
<!-- Required claims -->
<OutputClaim ClaimTypeReferenceId="objectId" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
<OutputClaim ClaimTypeReferenceId="extension_isMigrated" DefaultValue="False" />
<OutputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" />
<!-- Optional claims -->
<OutputClaim ClaimTypeReferenceId="userPrincipalName" />
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="accountEnabled" />
<OutputClaim ClaimTypeReferenceId="otherMails" />
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
</OutputClaims>
<IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>
我正在使用 Azure B2C 身份体验框架创建自定义用户旅程。我的问题是我想在身份验证失败时继续用户旅程。但是,似乎将身份验证失败解释为异常,从而导致旅程终止。
此旅程旨在适应从旧身份提供商到 B2C 的即时帐户迁移过程。
我要实现的流程是:
- 尝试使用 B2C 登录表单进行身份验证
- 身份验证失败时,查询 REST API 以确定用户的电子邮件地址是否存在于遗留系统中
- 如果电子邮件地址存在,则向用户提供 B2C 注册表单
这种情况有可能吗?
我不确定是否有办法在完全身份验证失败时继续,但如果仅检查用户帐户是否存在就足够了,您可能不需要这样做。
您可以在不尝试验证的情况下检查输入的用户名是否存在于B2C中。如果目录中不存在用户,则将 RaiseErrorIfClaimsPrincipalDoesNotExist 元数据设置为 false 允许 B2C 策略继续。然后您可以使用输入的用户名并继续使用其他技术配置文件。
我使用以下代码片段作为验证技术配置文件,如果找到对象 ID,我 运行 login-NonInteractive 配置文件,如果没有,我 运行 自定义身份验证配置文件
<TechnicalProfile Id="AAD-UserReadUsingEmailAddress-NoError">
<Metadata>
<Item Key="Operation">Read</Item>
<Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">false</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" />
</InputClaims>
<OutputClaims>
<!-- Required claims -->
<OutputClaim ClaimTypeReferenceId="objectId" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
<OutputClaim ClaimTypeReferenceId="extension_isMigrated" DefaultValue="False" />
<OutputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" />
<!-- Optional claims -->
<OutputClaim ClaimTypeReferenceId="userPrincipalName" />
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="accountEnabled" />
<OutputClaim ClaimTypeReferenceId="otherMails" />
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
</OutputClaims>
<IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>