Как проверить access_denied на клиенте при использовании IdentityServer4? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть страница входа в систему, и мне нужно, когда пользователь нажимает кнопку Отмена, чтобы перенаправить его на доступ к запрещенной странице в клиентском приложении.

Внутреннее действие входа в систему:

 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) или еслиесть другая проблема, вызвавшая этот сбой?

1 Ответ

0 голосов
/ 21 ноября 2018

На стороне IdentityServer:

Базовая форма имеет 2 кнопки: login и cancel.Если login не нажата;это cancel.

В противном случае это ошибка проверки, и вы можете показать ее.На cancel вы должны перенаправить обратно на страницу, которая имеет смысл.

На стороне MVC:

Вы можете перенаправить с дополнительными параметрами.Их можно получить и использовать для отображения ошибки.Помните, что большая часть обработки ошибок, например, неверное имя пользователя / пароль, остается на стороне IdentityServer.

...