Как я могу использовать repoze.who / repoze.what с SPNEGO? - PullRequest
0 голосов
/ 14 июля 2010

Я пытаюсь сделать единый вход (SSO) с помощью веб-приложения для интрасети, написанного на Pylons, и я хотел бы использовать repoze.what для авторизации.Я настроил Apache с mod_sspi, и он правильно аутентифицирует пользователя и устанавливает переменную среды REMOTE_USER.Однако я не могу понять, как убедить repoze.who, что пользователь действительно аутентифицирован.

Я попытался создать Идентификатор, который выглядит следующим образом:

class NtlmIdentifier(object):     
    def identify(self, environ):           
        if environ['AUTH_TYPE'] == 'NTLM':
            return { 'repoze.who.userid': environ['REMOTE_USER'] }

        return None

    def remember(self, environ, identity):
        pass

    def forget(self, environ, identity):
        pass

И регистрацияпозднее промежуточное программное обеспечение выглядит следующим образом:

return setup_auth(app, groups, permissions, identifiers=identifiers, authenticators=[], challengers=[])

Но кажется, что метод identify моего идентификатора никогда не вызывается средой.

Как интегрировать SPNEGO / SSPI с repoze.who и repoze.what?

1 Ответ

1 голос
/ 14 июля 2010

Когда переменная REMOTE_USER установлена ​​заранее (например, веб-сервером), repoze.who ничего не сделает, даже не вызовет зарегистрированные плагины.

Что касается repoze.what v1, потому что этоустанавливается из плагина repoze.who, это означает, что repoze. какие учетные данные не будут доступны, и, следовательно, пользователь всегда будет анонимным;это не будет проблемой в repoze.what 2 (в стадии разработки).

Чтобы все работало так, как вы ожидаете, вы можете сохранить написанный вами идентификатор и передать аргумент remote_user_key в setup_auth:

return setup_auth(app, groups, permissions, remote_user_key=None, identifiers=identifiers, authenticators=[], challengers=[])

HTH.

...