c# - 使用IdentityServer4时如何在客户端检查access_denied?

标签 c# identityserver4 openid-connect

我有一个登录页面,当用户单击“取消”按钮时我需要将他重定向到客户端应用程序上访问被拒绝的页面。

内部登录操作:

 if (button != "login")
        {
            // the user clicked the "cancel" button
            var context = await interaction.GetAuthorizationContextAsync(model.ReturnUrl);
            if (context != null)
            {
                // if the user cancels, send a result back into IdentityServer as if they 
                // denied the consent (even if this client does not require consent).
                // this will send back an access denied OIDC error response to the client.
                await interaction.GrantConsentAsync(context, ConsentResponse.Denied);

                // we can trust model.ReturnUrl since GetAuthorizationContextAsync returned non-null
                return Redirect(model.ReturnUrl);
            }
        }

在客户端(MVC)我配置了以下事件:

options.Events = new OpenIdConnectEvents
                {
                    OnRemoteFailure = context => 
                    {
                        // here it's returned as 200 ok in case I denied 
                        // consent should'nt be 401 access denined??
                        var statusCode=context.Response.StatusCode;
                        context.Response.Redirect("/");
                        context.HandleResponse();

                        return Task.FromResult(0);
                    }
                };

但我的问题是:我怎么知道 IdentityServer4 失败是因为用户单击了取消按钮 (access_denied) 还是其他问题导致了失败?

最佳答案

在 IdentityServer 端:

基本表单有 2 个按钮:logincancel。如果 login 没有被按下;这是一个取消

否则它是一个验证错误,你可以显示它。在 cancel 上,您应该重定向回有意义的页面。

在 MVC 方面:

您可以使用额外的参数进行重定向。这些可以被获取并用于显示错误。请记住,许多错误处理(例如无效的用户名/密码)都在 IdentityServer 端进行。

关于c# - 使用IdentityServer4时如何在客户端检查access_denied?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53408511/

相关文章:

c# - 包含忽略大小写的方法

c# - dataSet.GetXml() 不会为空列或空白列返回 xml

c# - 在字典中添加复杂的键!对性能有影响吗

asp.net-mvc-4 - 使用 nonce 为登录页面添加书签

android - Android 中的 Oauth2 刷新 token 更新

spring-security - 客户端和资源服务器的 Spring OAuth2 XML 配置

c# - #if 指令中的几个自定义配置

c# - IdentityServer4多个WSFederation-providers导致异常

oauth-2.0 - 带有静默刷新的 OpenID Connect 授权代码流和 PKCE

oauth-2.0 - 联合与委托(delegate),OAuth 与 OpenID Connect 与 SAML