Я довольно долго искал нечто подобное (в Linux), которое несколько раз приводило меня на эту страницу, но не давало ответа. Итак, вот мое решение, которое я придумала:
Веб-сервер - это Apache с mod_auth_kerb. Он уже запущен в Active Directory, настройка единого входа уже довольно давно.
Что я уже смог сделать раньше:
- Использование хрома с единым входом в Linux (с правильной настройкой krb5, с рабочим kinit user @ domain)
- Наличие Python Connect и единого входа с использованием sspi из пакета pywin32, с чем-то вроде
sspi.ClientAuth("Negotiate", targetspn="http/%s" % host)
Следующий фрагмент кода завершает головоломку (и мои потребности), имея единый вход Python с Kerberos в Linux (используя python-gssapi):
in_token=base64.b64decode(neg_value)
service_name = gssapi.Name("HTTP@%s" % host, gssapi.C_NT_HOSTBASED_SERVICE)
spnegoMechOid = gssapi.oids.OID.mech_from_string("1.3.6.1.5.5.2")
ctx = gssapi.InitContext(service_name,mech_type=spnegoMechOid)
out_token = ctx.step(in_token)
buffer = sspi.AuthenticationBuffer()
outStr = base64.b64encode(out_token)