Как я могу использовать repoze.who/repoze.what с SPNEGO?
Я пытаюсь сделать единый вход (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 ответ
Когда переменная REMOTE_USER установлена заранее (например, веб-сервером), repoze.who ничего не будет делать, даже не вызовет зарегистрированные плагины.
Что касается repoze.what v1, поскольку он настроен из плагина repoze.who, это означает, что учетные данные repoze.what не будут доступны, и поэтому пользователь всегда будет анонимным; это не будет проблемой в repoze.what 2 (в стадии разработки).
Чтобы все работало так, как вы ожидаете, вы можете сохранить идентификатор, который вы написали, и передать аргумент remote_user_key в setup_auth:
return setup_auth(app, groups, permissions, remote_user_key=None, identifiers=identifiers, authenticators=[], challengers=[])
НТН.