Можно ли закрыть окно входа в систему Azure AD B2 C после перенаправления на электрон с помощью системного браузера? - PullRequest
2 голосов
/ 21 января 2020

Текущая ситуация

Мы создали приложение Electron, которое использует веб-API, защищенные Azure AD B2 C. Процесс аутентификации происходит следующим образом:

  • Пользователь хочет войти в систему
  • Электрон готовит начальный запрос OID C (код типа возврата с oid c включенная область)
  • Electron (основной поток) открывает системный браузер с правильным b2clogin.com tenant
  • Пользователь вводит учетные данные и перенаправляется в случае успеха (с использованием специального протокола, например my-awesome-app://)
  • Electron приложение обрабатывает перенаправление (обработка нового экземпляра, разбор URL, все работает нормально)
  • Правильно проанализированная информация используется для отправки последнего запроса авторизации (снова в основном процессе)
  • Приложение получает аутентификацию токен и пользователь вошли в систему

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

Проблема

Вышеупомянутый процесс работает хорошо - он имеет только одно предупреждение : окно браузера, в котором пользователи вводят свои учетные данные, остается открытым. Насколько я могу судить, это происходит потому, что браузер должным образом перенаправляет, но никогда не знает, что это удалось (сетевой монитор браузера будет показывать сбой, даже если перенаправление было обработано ОС).

Насколько Из проверки настольного приложения GitHub, настольного приложения Slack, а также этого . NET примера консольного приложения Брока Аллена я знаю, что такое поведение следует ожидать. Основная проблема с Azure AD B2 C заключается в том, что поставщик удостоверений никогда не покидает форму входа, содержащую введенные учетные данные.

Насколько я вижу (и я провел много времени в Google и документы Microsoft) нет очевидного способа изменить это поведение. ВПЛ, используемые этими приложениями, переходят на другую страницу и отображают сообщение, чтобы закрыть вкладку после успешного входа в систему. Я попытался найти руководство в документации MSAL - поскольку это собственная библиотека Microsoft для этого варианта использования - но они, похоже, вообще не рассматривают пользовательские протоколы (очевидно, использование системного браузера даже активно не рекомендуется для UWP ).

Была предпринята попытка предложить MSAL для Electron во время стажировки в Microsoft, но попытки, по-видимому, были прекращены. Он также использовал бы новое окно электронного браузера в том же процессе, который мы активно стараемся избегать.

Насколько я вижу, текущая «лучшая вещь, которую вы можете получить» - это заставить IDP перейти к окну. который нельзя использовать для извлечения учетных данных, если пользователь забудет закрыть его.

Это приводит к моему основному вопросу: возможно ли добиться такого поведения с помощью Azure AD B2 C или мы вынуждены вернуться к опыту «встроенного веб-просмотра»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...