我正在尝试使用Pylons编写的Intranet Web应用程序进行单点登录(SSO),并且我想使用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集成?
答案 0 :(得分:1)
当预先设置REMOTE_USER变量时(例如,通过Web服务器),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=[])
HTH。