С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 18.11.2017
Сообщений: 30
1

Не работает SSO Для Django : отладить и найти журналы ошибок

19.12.2018, 08:19. Показов 791. Ответов 4

Маловероятно, но все же постараюсь найти помощь именно здесь Спасибо, что зашли.
Не работает SSO Для Django
В тестовой среде все работало, перенес в рабочий домен. Настройки-имена вроде идентичные, но не могу найти где именно проблема?
На всем домене разрешил SSO для всех сайтов и контретно под это имя (есть другой сайт на C# ASP, там SSO работает с такими же настройками)

На Apache2(Debian) развернут костыль Django(mod_wsgi)
Настроил авторизацию через KRB5, Keytab скопировал, настроил SPN, команды kutil проходят, авторизация успешна.

Как это должно работать?
При входе на сайт из пользователем AD проходит авторизация и он видит своё имя на сайте или ошибку 401, если не прошло.

Включена опция в IE "автоматический вход в сети с текущим пользователем"
Не проходит

Выключаю опцию - сайт запрашивает логин\пароль и авторизация проходит.
Подразумеваю, что со стороны Apache2 настроено, иначе не подхватывал и ручной ввод пароля.

Ошибки Apache2:
gss_accept_sec_context() failed: An unsupported mechanis was requested (, Unknown error), referer: http://django
Ошибки Windows:
неизвестно где искать, подскажите? В локальных журналах авторизации пусто
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2018, 08:19
Ответы с готовыми решениями:

Как правильно удалить журналы ошибок SQL Server ErrorLog
День добрый. Можно файлы простым выделением удалить или надо процедуру провести? C:\Program...

Не работает SSO
Здравствуйте! Уважаемые форумчане, я в админах недавно поэтому немного в заблуждении, просто не...

Изменить логику системы на Python+Django и отладить web-интерфейс
Задача: Устранить недостатки и внести изменения в систему выбора маршрута для исходящих...

Продаю книги, учебники, журналы, коробочки для cd/dvd
Книги новые или использовались редко. Торг уместен. г Москва Духовная литература 1....

4
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
19.12.2018, 12:41 2
если вы понимаете в krb5, то у него есть разные механизмы авторизации (OID так называемый) gss_accept_sec_context(), говорит о том, что он пытается авторизоваться по GSSAPI, (авторизация по GSSAPI происходит следующим образом: браузер шлет серверу запрос, без токена, сервер отвечает 401, и ставит в заголовок специальную штуку, дальше браузер идет на LDAP сервер, формирует токен, и записываая его в заголовок шлет новый запрос уже с токеном ),
тут имеет значение какой сервер LDAP установлен, если у вас установлен Microsoft AD, то GSSAPI авторизация туда не применима, смотрите в сторону SSPI (реализация его под виндой, ыроде бы так называется) и на апаче соответствующие пакеты нужно поставить (auth_sspi_spnego или как то так, давно дело было уже не вспомню)

если же у вас все по-человечески и сервер LDAP развернут на nix (freeipa например), то вам необходимо использовать другой пакет

так же есть вариант не перекладывать авторизацию пользователя на веб сервер, а реализовать ее самому, вот мой пример реализации через python-gssapi:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from django.http import HttpResponse
from django.core.cache import caches
from django.conf import settings
import gssapi
import os
import logging
import base64
 
 
 
class GSSAPIMiddleware(object):
    """GSSAPI Middleware make user auth and cache user token
    and user name. Needed to fix gssstring response like
    spnego protocol says to return response with this string"""
    def process_view(self, request, *args, **kwargs):
        if not settings.GSSAPI_ENABLED_OPTION:
            return None
        unauthorized = False
        if 'HTTP_AUTHORIZATION' in request.META:
            kind, client_token = request.META['HTTP_AUTHORIZATION'].split(' ', 1)
            if kind == 'Negotiate':
                # TODO make sys logging with sb_logging
                local = caches['local']
                service = settings.GSSAPI_SERVER
                os.environ['KRB5_KTNAME'] = settings.GSSAPI_KEYTAB_PATH
                os.environ['KRB5_CONFIG'] = '/etc/krb5.conf'
                ccache = settings.GSSAPI_CCACHE
                store = {'ccache': ccache,}
                server_name = gssapi.Name(service, name_type=gssapi.NameType.hostbased_service)
                server_creds = gssapi.Credentials(usage='accept', name=server_name)
                ctx = gssapi.SecurityContext(creds=server_creds, usage='accept')
                try:
                    _unused_server_tok = ctx.step(base64.b64decode(client_token))
                except:
                    unauthorized = True
                else:
                    user_name = ctx.initiator_name
                    principal = user_name.display_as(user_name.name_type)
                    ctx.delegated_creds.store(store, usage='initiate', overwrite=True)
                    local.set(settings.GSSAPI_USER_PRINCIPAL_KEY, principal)
            else:
                unauthorized = True
        else:
            unauthorized = True
        if unauthorized:
            return HttpResponse('Unauthorized', status=401)
        return None
 
    def process_request(self, request, *args, **kwargs):
        """function call for every view before Django
        choose witch view would be called. function
        ask user`s browser for Negotiate token"""
        if not settings.GSSAPI_ENABLED_OPTION:
            return None
        unauthorized = False
        if 'HTTP_AUTHORIZATION' in request.META:
            kind, initial_client_token = request.META['HTTP_AUTHORIZATION'].split(' ', 1)
            if kind != 'Negotiate':
                unauthorized = True
        else:
            unauthorized = True
        if unauthorized:
            response = HttpResponse(request, status=401)
            response['WWW-Authenticate'] = 'Negotiate'
            return response
        return None
это немного не ваша задача и вам нужны другие действия, но мы так же мы пошли дальше и реализовали запрос в БД из-под этого пользователя, если понадобиться могу тоже выложить
0
2 / 2 / 0
Регистрация: 18.11.2017
Сообщений: 30
19.12.2018, 13:53  [ТС] 3
LDAP под виндой. Именно этот вариант работал на тестовом домене аналогичной конфигурации.
Не так все сложно, мне не нужен полноценный backend.middleware для авторизации.

Мне нужно просто, чтобы на META_REQUEST[REMOTE_USER] (или как-то так) поступал логин user@domain. Как только я получу этот реквест, буду счастлив.
Спасибо про советы\sqrt[]{}
0
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
19.12.2018, 16:29 4
epiphone, просто используйте mod_authnz_sspi для apache24
0
2 / 2 / 0
Регистрация: 18.11.2017
Сообщений: 30
20.12.2018, 04:18  [ТС] 5
Ошибка была из-за невнимательности, даже неловко от того, что ее не заметил. С утра на свежую голову все заработало (mod_krb5_auth)
Перед сном возникла мысль, что я не мог полностью скопировать настройки сайта, потому что адрес был уже занят.

Занят адрес - поставил другой, и пытался войти в адрес test_django через HTTP/working_django - конечно, Kerberos не понимал такой подмены fqdn

Спасибо за ответы, в свободное время опробую другие методы входы на сайт, и оставлю самые простые способы

/thread
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2018, 04:18

"Ловушка" для ошибок не работает должным образом. ООП
Здравствуйте. Работаю над ядром, и столкнулся с такой проблемой когда "ловлю" ошибки в системе: ...

Не работает url в Django
здравствуйте не давно начал изучать Django и в самом начале моего пути у меня не работает url, а...

Onmouseover не работает с Django
Здравствуйте. Скопировал html в django, вроде всё настроил, картинки есть и т.д. Но вот с...

Как работает статика в django?
Здравствуйте, начал изучать django (v1.10.4), не могу понять, как работает статика. Допустим, я...

Не работает Django Debug Toolbar?
Не работает модуль Django Debug Toolbar. Скачал, установил и настроил данный модуль по этой...

Не работает сервер django, nginx
сделал всё по инструкции этой: Alibaba Установил django, gunicorn, nginx, postgresql на малинку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru