Я пытаюсь реализовать аутентификацию на основе Kerberos с использованием Flask REST API. Для выполнения sh этого я использую библиотеку Python flask_kerberos.
Я интегрировал библиотеку, как показывает имеющаяся документация:
@app.route("/log")
@requires_authentication
def get(user):
... code
if __name__ == '__main__':
init_kerberos(app,service=settings.service,hostname=settings.hostname)
app.run(host='0.0.0.0',port=settings.api_port,debug=settings.debug_mode,ssl_context=context)
Обратите внимание, что настройки Переменная выше содержит переменные, загруженные из файла конфигурации, и что эти переменные загружаются правильно. Библиотеке flask_kerberos также необходимо установить KRB5_KTNAME в расположение keytab, и это также предоставляется файлом конфигурации.
При запуске приложения все идет хорошо, и из журналов flask_kerberos я вижу, что основной загружен - правильный, предварительно загруженный из файла конфигурации и соответствующий keytab.
INFO in flask_kerberos: Kerberos: server is service/hostname@realm
Несмотря на это, при отправке запроса с завитком в режиме отладки:
curl -k -v -d '{"int_id":"id0000","process_id":0}' -H "Content-Type: application/json" --negotiate -u : -b ~/cookiejar.txt -X GET https://localhost:8088/log
Во время отладки я вижу, что gss_init_sec_context () не удалось:
gss_init_sec_context() failed: : Server HTTP/localhost@realm not found in Kerberos database
Это происходит потому, что flask_kerberos вместо использования настроек, которые я передал в функцию init_kerberos (загружается из файла конфигурации ) переопределяет их значениями по умолчанию «HTTP» и любым именем хоста, отправленным в curl. Однако используемая область является правильной.
Обратите внимание, что я уже пробовал использовать другую библиотеку: flask_gssapi. Однако проблема все еще не устранена.
Мой вопрос: можете ли вы изменить службу и имя хоста, используемые flask_kerberos (это так кажется исходным кодом библиотеки), или библиотека всегда переопределяет значения по умолчанию: service = 'HTTP 'и hostname = gethostname ()?