Как выйти из IdentityServer в приложении Win Form без отображения браузера

#c# #identityserver4

#c# #identityserver4

Вопрос:

Я пытаюсь выйти из IdentityServer через библиотеки OidcClient, но решение, которое у меня есть сейчас, требует, чтобы у меня было пустое диалоговое окно, которое появляется в течение 5 секунд, прежде чем я смогу выйти. Это очень некрасиво, и должен быть лучший способ сделать это.

В официальном примере для предотвращения всплывающего окна формы используется событие «BeforeNavigate2», но это недоступно без включения некоторого импорта COM и расширения управления WebBrowser, как показано здесь, и это то, чего я также пытаюсь избежать.

Я уже пытался заменить ShowDialog семафором, но если я буду ждать на нем, я получу взаимоблокировку, потому что ожидающий поток тот же, который должен запускать событие «Navigated». Я также пытался заменить навигацию браузера HttpClient, но тогда я теряю функциональность перенаправления и удаления файлов cookie, которые веб-браузер уже обрабатывает

Это мой код:

 public override Task<BrowserResult> InvokeAsync(BrowserOptions options) {
    BrowserResult result = null;
    var t = new Thread(() => result = Run());
    //needed because the browser UserControl will throw an exception if not inside a STA thread
    t.SetApartmentState(ApartmentState.STA);
    t.Start();
    t.Join();
    return System.Threading.Tasks.Task.FromResult(result);
}
private BrowserResult Run(){
    form = new Form { Name = "WebAuthentication", Text = formCaption, Width = 
    formWidth, Height = formHeight, ShowIcon = false };
    browser = new WebBrowser { Dock = DockStyle.Fill };
    form.Controls.Add(browser);
    browser.Navigated  = (sender, args) => {
                         form.Close();
                       };
    browser.Navigate(options.StartUrl);
    form.ShowDialog();
    return new BrowserResult { ResultType = BrowserResultType.Success };
}
  

Что я здесь делаю, так это использую ShowDialog для блокирования выполнения до тех пор, пока веб-запрос не будет полностью заполнен, громко блокируя поток, а затем освобождая его с помощью формы.Закрыть().

В идеале, выход из системы должен занимать не более пары секунд, и никакие окна не должны появляться.
Приветствуется любая помощь.

Комментарии:

1. у меня нет ответа, только идея: почему бы не попробовать другой элемент управления веб-браузером, такой как github.com/cefsharp/CefSharp это может быть проще, чем играть со встроенной в Windows magic