идентификационный сервер 4 альтернативный выход перенаправить URI - PullRequest
1 голос
/ 28 апреля 2020

Мы используем Identity Server 4 для защиты веб-приложения и API. Эта часть процесса работает, пользователи могут войти и получить доступ к различным частям приложения. Проблема, с которой я сталкиваюсь, заключается в том, что во время выхода из системы мне нужно передать значение на Identity Server по одной из двух причин. Либо выход произошел из-за того, что пользователь нажал кнопку выхода из системы (поток по умолчанию), либо пользователь был неактивен в течение X минут (пользовательский процесс).

Я потратил много времени на чтение и просмотр документации Identity Server 4, и кажется, что, хотя они указывают на то, что это возможно, нет примера. Я пытался найти способ передачи / отправки значения во время выхода из Identity Server 4 и не смог найти ответ. Многие результаты говорят об установке RedirectUri для объекта AuthenticationProperties и добавлении этого в метод HttpContext.SignOutAsync(). Я сделал это и не видел PostLogoutRedirectUri изменения LogoutContext. Я удостоверился, что добавил 2 версии URL (по умолчанию и пользовательский процесс) в список клиентов RedirectUris.

Может кто-нибудь указать мне, что я делаю неправильно?

ОБНОВЛЕНИЕ:

Мы используем ASP. NET MVC Core 2.1 для клиента и Identity Server 4 v2.3.2 для полномочий.

Выход из системы и отмена токенов работает как надо с HttpContext.SignOutAsync() - проблема в том, что на клиенте есть две опции: пользователь может нажать кнопку выхода из системы, вызвав действие выхода из системы, или сценарий запускает отправку действия выхода из системы. в значении. Мне нужно иметь возможность выполнить обычный процесс выхода из системы и в конечном итоге отображать 1 из 2 различных сообщений в зависимости от того, как был инициирован выход из системы.

ОБНОВЛЕНИЕ2:

Поскольку я опубликовав это, я проделал некоторую работу с чистым проектом - теперь я знаю, что LocalRedirect() не будет работать для меня, так как хосты различаются между полномочиями и клиентами. т.е.: Клиент - https://client.company.com, Полномочия: https://auth.company.com.

Полномочия

 public async Task Logout(string logoutid)
        {

            var logoutContext = _interaction.GetLogoutContextAsync(logoutid);
            var postLogOutRedirectUri = logoutContext.Result.PostLogoutRedirectUri;


            await _signInManager.SignOutAsync();


            LocalRedirect(postLogOutRedirectUri);

        }

MVC клиент

public async Task Logout(string value = null)
        {
            await HttpContext.SignOutAsync("Cookies");

            //custom logout process
            if (!string.IsNullOrWhiteSpace(value))
            {

                var authProperties = new AuthenticationProperties()
                {
                    RedirectUri = $"{_config["IdentityServer:MvcClient"]}/{RedirectToAction().UrlHelper.Action("Idle", "Home")}"
                };

                await HttpContext.SignOutAsync("oidc", authProperties);

                return;
            }

            //default logout process
            await HttpContext.SignOutAsync("oidc");
        }
...