Как установить соединение с Kerberos в приложении Python? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть задача создать SSO (единый вход) авторизацию в Python бэкэнд-приложении с помощью Kerberos и Active Directory.

Другими словами, приложение внешнего интерфейса отправляет запрос AJAX GET на конкретный URL-адрес внутреннего приложения. Это внутреннее приложение должно возвращать информацию о сотруднике в формате JSON.

Что я сделал до сих пор:

1) SPN имя для внутреннего приложения было создано в Active Directory.

2) krb5.keytab файл для внутреннего приложения создан.

3) Active Directory и сервер Kerberos, расположенный на удаленном сервере Windows.

4) Бэкэнд-приложение будет в контейнере Linux Docker.

5) Я устанавливаю клиент Kerberos в контейнер Docker.

6) Область Kerberos: SERVICE.LOCAL.

7) Имя хоста для сервера KDC: CS001, CS002, CS003.

Вы когда-нибудь видели какие-либо реализации вышеуказанного процесса в Python? Буду благодарен за любую помощь.

1 Ответ

1 голос
/ 12 апреля 2019

У вас есть 2 способа справиться с этим:

  1. Обрабатывать это напрямую в Python
  2. Обрабатывать это через прокси-сервер, например apache или nginx

Pure Python Solution

Если у вас нет прокси или вы просто хотите обработать его в python, я рекомендую использовать библиотеку python-gssapi . Вот пример кода .Существуют и другие привязки Python, но из моего прочтения этот кажется наиболее полным.

Обратите внимание, что если вы будете обрабатывать это таким образом, вашему питон-серверу, вероятно, потребуется способность поддерживать заголовок keep-alive (т.е. повторно использовать одно и то же соединение для нескольких запросов).Это не является строго частью протокола SPENGO, но большинство браузеров, кажется, требуют, чтобы сервер реализовал его.

Proxy Solution

Если вы используете apache, есть модуль mod_auth_kerb , который вы можете использовать, что хорошо документировано.Также есть mod_auth_gssapi , который обеспечивает аналогичную функциональность.

Для nginx есть аналогичный модуль .

С любым из этих прокси-решений идея заключается в том, что прокси-сервер обрабатывает аутентификацию Kerberos и устанавливает переменную REMOTE_USER env для вашего приложения на python.Таким образом, ваше приложение на Python должно иметь возможность принимать эту переменную в качестве аутентифицированного пользователя. Django имеет промежуточное программное обеспечение специально для этой цели - я не уверен насчет Flask (я упоминаю эти 2 фреймворка, потому что они в тегах вашего вопроса).

...