Я пытаюсь включить аутентификацию Kerberos для нашего веб-сайта. Идея состоит в том, чтобы пользователи, вошедшие в домен Windows AD, получали автоматический вход (и первоначальное создание учетной записи)
Прежде чем я займусь стороной Windows, я хотел, чтобы она работала локально. Поэтому я сделал тестовый контейнер KDC/KADMIN, используя [email protected]:ist-dsi/docker-kerberos.git.
Веб-сервер находится в локальном контейнере докеров с nginx и скомпилированным модулем spnego. Контейнер KDC/KADMIN находится по адресу 172.17.0.2 и доступен из моего контейнера веб-сервера.
Вот мой локальный krb.conf:
default_realm = SERVER.LOCAL
[realms]
SERVER.LOCAL = {
kdc_ports = 88,750
kadmind_port = 749
kdc = 172.17.0.2:88
admin_server = 172.17.0.2:749
}
[domain_realms]
.server.local = SERVER.LOCAL
server.local = SERVER.LOCAL
и krb.conf в контейнере веб-сервера
[libdefaults]
default_realm = SERVER.LOCAL
default_keytab_name = FILE:/etc/krb5.keytab
ticket_lifetime = 24h
kdc_timesync = 1
ccache_type = 4
forwardable = false
proxiable = false
[realms]
LOCALHOST.LOCAL = {
kdc_ports = 88,750
kadmind_port = 749
kdc = 172.17.0.2:88
admin_server = 172.17.0.2:749
}
[domain_realms]
.server.local = SERVER.LOCAL
server.local = SERVER.LOCAL
Вот принципы и конфигурация keytab (keytab копируется в веб-контейнер в /etc/krb5.keytab)
rep ~/project * rep_krb_test $ kadmin -p kadmin/[email protected] -w hunter2
Authenticating as principal kadmin/[email protected] with password.
kadmin: list_principals
K/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
krbtgt/[email protected]
[email protected]
[email protected]
kadmin: q
rep ~/project * rep_krb_test $ ktutil
ktutil: addent -password -p [email protected] -k 1 -f
Password for [email protected]:
ktutil: wkt krb5.keytab
ktutil: q
rep ~/project * rep_krb_test $ kinit -C -p [email protected]
Password for [email protected]:
rep ~/project * rep_krb_test $ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]
Valid starting Expires Service principal
02/07/20 04:27:44 03/07/20 04:27:38 krbtgt/[email protected]
Соответствующая конфигурация nginx:
server {
location / {
uwsgi_pass django;
include /usr/lib/proj/lib/wsgi/uwsgi_params;
auth_gss on;
auth_gss_realm SERVER.LOCAL;
auth_gss_service_name HTTP;
}
}
Наконец, etc/hosts
# use alternate local IP address
127.0.0.2 server.local server
Теперь я пытаюсь получить доступ к этому с помощью curl:
* Trying 127.0.0.2:80...
* Connected to server.local (127.0.0.2) port 80 (#0)
* gss_init_sec_context() failed: Server krbtgt/[email protected] not found in Kerberos database.
* Server auth using Negotiate with user ''
> GET / HTTP/1.1
> Host: server.local
> User-Agent: curl/7.71.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
....
Как видите, он пытается использовать имя участника-службы krbtgt/[email protected], тогда как kinit использует krbtgt/[email protected] в качестве имени участника-службы.
Как заставить это работать?
Заранее спасибо..
local
вместоserver.local
. - person bk2204   schedule 02.07.2020