Как внедрить SSO на базе Active Directory с электроном?

Как я могу захватить контекст безопасности пользователя (имя пользователя и т.д.) в электронном приложении, работающем под Windows?

Я знаю, что могу использовать переменные среды (process.env.USER), но я не думаю, что это безопасно.

Ответ 1

Правильный ответ будет зависеть от многих аспектов вашей среды, но здесь некоторые идеи.

Passportjs
Passportjs - это пакет goto для аутентификации nodejs. Немного погуглив, я обнаружил, что Microsoft создала репозиторий github под названием passport-azure-ad со стратегиями (интерфейсами, которые passportjs использует для соединения с вещами) специально для аутентификации Azure AD. Так что, если вы используете Azure AD, passport-azure-ad - хороший способ.

Паспорт-Azure-Ad Issue
Если нет, и вы попытаетесь использовать passport-azure-ad для аутентификации в ADFS, WS-FED или SAML, вы, скорее всего, столкнетесь с этой проблемой. Короче говоря, это не поддерживается этим репо.

Паспорт-ldapauth
Так что в этом случае, посмотрите на этот пост SO, описывающий, как использовать стратегию passport-ldapauth для аутентификации в ADFS. Это не кажется слишком сложным, хотя есть некоторые "недочеты", на которые стоит обратить внимание. Есть также другие хорошие предложения для OAuth и дальнейшие объяснения владельца паспорта для passport-ldapauth.

Хотя я не использовал passport-ldapauth, я много лет интегрировал AD/LDAP, и LDAP - это хорошо известный и хорошо документированный метод аутентификации, и он достаточно безопасен. Эта статья является хорошим примером проблем безопасности, о которых следует помнить при использовании LDAP. Однако эти проблемы касаются использования протокола и не связаны напрямую с пакетом Passport-ldapauth.


Обновить:

Начиная с версии Electron 0.35.0 новый app.allowNTLMCredentialsForAllDomains(allow) также может влиять на вашу ситуацию. В соответствии с документами это позволяет вам динамически устанавливать, всегда ли отправлять учетные данные HTTP NTLM или согласовывать их в обычном режиме. Существует также отказ от ответственности за то, что эта опция не работает в некоторых "плохо настроенных" сетях, но она того стоит.