代码之家  ›  专栏  ›  技术社区  ›  Simple Code

如何在使用IdentityServer4时检查客户端上的拒绝访问?

  •  0
  • Simple Code  · 技术社区  · 5 年前

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

    内部登录操作:

     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失败是因为用户单击了cancel按钮(访问被拒绝)还是因为有其他问题导致了失败?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Stefan    5 年前

    在identityserver端:

    基本表单有两个按钮: login cancel . 如果 登录 没有压力;它是 取消 .

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

    在MVC方面:

    可以使用额外参数重定向。可以提取这些数据并用于显示错误。请记住,许多错误处理,如无效的用户名/密码,都会保留在identityserver端。