【发布时间】:2018-12-07 20:30:10
【问题描述】:
我们有一个自定义的 Azure AD B2C 登录/注册策略(基于 SAML,默认策略不能满足我们的需要)。
我们可以通过如下内容定义自定义页面 UI:
<ContentDefinition Id="api.localaccountsignin">
<LoadUri>https://example.com/SAMLSignIn.html</LoadUri>
<RecoveryUri>~/common/default_page_error.html</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:selfasserted:1.1.0</DataUri>
<Metadata>
<Item Key="DisplayName">Local account sign in page</Item>
</Metadata>
</ContentDefinition>
但尝试自定义错误页面,通过:
<ContentDefinition Id="api.error">
<LoadUri>https://example.com/SAMLErrorPage.html</LoadUri>
<RecoveryUri>~/common/default_page_error.html</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:globalexception:1.1.0</DataUri>
<Metadata>
<Item Key="DisplayName">Error page</Item>
</Metadata>
</ContentDefinition>
没有任何改变。 SAMLSignIn.html 页面仍在使用中(尽管出现了任何登录错误的内容)。无论我们使用无效的用户名、错误的密码等进行测试,都会发生这种情况。
均匀设置
<Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
在关联的<ValidationTechnicalProfile> 中不会强制出错。
在 ApplicationInsights 中看到的用户旅程仅显示 Web.TPEngine.Providers.BadArgumentRetryNeededException;没有记录其他错误或异常。
我们如何在登录失败时使用自定义错误页面(无论出于何种原因)?
文档似乎暗示我们正在做正确的事情(How to Create a Custom Error Page in Azure AD B2C | Custom Policies 也是如此)。我找不到任何建议我们需要在 UserJourney 中指定自定义错误处理,也找不到任何我们可以这样做的方法。
【问题讨论】:
-
hm,刚刚玩了一个类似的案例。我显示了我的错误页面,但因为我在索赔中发现了我的错误行为。然后就比较容易了。发生错误时会发生什么 - 您在 B2C
/authresp上看到空白页面,或者您被重定向到您的应用程序,其中查询字符串指示错误?通常,如果您到达被重定向的那一点,则处理应用程序中的错误要容易得多。以及为什么您将api.localacocuntsignin用于 SAML?!错误发生在哪个OrchestrationStep? -
使用
localaccountsignin是因为我们不希望通过 SAML 流进行注册。例如,如果我以未知用户身份登录时发生的错误(如预期的那样)。我们看到错误很好,但在登录页面的自定义 HTML 中,而不是错误页面 HTML。我相信这一切都发生在 CombinedSignInAndSignUp 步骤中;我们只是使用 localaccountsignin 内容定义。 -
您是否只有一个为旅程注册的索赔提供者 - SAML 那个?如果是这样,您将被重定向到 SAML IdP 登录页面。接下来,您将使用 SAML 登录的结果登陆 B2C。如果您在 SAML IdP 输入错误密码,您将看到 SAML IdP 的错误页面,而不是 B2C 的错误页面。您似乎尝试在本地登录,而不是通过您的 SAML 提供商。这就是您只看到自定义登录页面的原因。我想知道您在登录页面看到什么错误?密码错误?那么这是本地的登录结果,预计会出现在那个页面上。
-
api.error 似乎仅用于未处理的错误。任何 IdP 错误(如未经同意)都会以将用户重定向到您的应用程序的方式处理,查询字符串形式为
error=server_error&error_description=AADB2C%3a+An+exception+has+occurred..... -
B2C 是 SAML 提供者,也就是说,我们使用 B2C 登录到依赖方进行身份验证。 B2C 接管以显示登录页面。如果一切顺利,我们最终会返回第三方站点并登录。任何失败都会显示在 SAML Journey 登录页面的上下文中。
标签: azure-active-directory azure-ad-b2c