首页 > 解决方案 > 当用户不想在 IdentityServer3 的登录页面上进行身份验证时如何重定向?

问题描述

我使用IdentityServer3作为 OpenId 提供者。在登录页面上,如果用户不想继续,我们希望允许用户在不进行身份验证的情况下返回应用程序。例如,使用不同意条款和条件,因此我们无法让用户登录或注册。他们仍然是将他们带到 IdentityServer 的应用程序的匿名用户。因此,在身份提供者 UI 上有一个“我不同意,带我回到我的应用程序”之类的链接或按钮是有意义的。

.NET 有一个 OpenIdConnect 中间件,它提供了一个名为OpenIdConnectOptions.Events.OnAuthenticationFailed的事件处理程序,应该在身份验证失败时调用它。

第一个问题:如何从 IdentityServer3 返回结果以在 .NET 客户端中触发此 OnAuthenticationFailed 事件处理程序?我还没有真正找到返回身份验证失败的方法。我不知道没有令牌的简单重定向是否足够好。

第二个问题:还有其他客户端(java、javascript、php)。由于这里客户端没有 .NET 中间件,客户端如何正确处理此类响应?

标签: openid-connectidentityserver3

解决方案


OAuth 2.0 规范提供了可能的响应类型,您可以在用户无法访问的情况下使用它们 - https://www.rfc-editor.org/rfc/rfc6749#section-4.2.1(参见第 4.2.2.1 节。错误回复)。所以 OP 应该使用 URL 参数 error 和 error_description 重定向回回调。例如:

https://rp.com/callback?error=access_denied&error_description=用户拒绝同意。


推荐阅读