如何在SPNEGO中使用repoze.who / repoze.what?

时间:2010-07-14 00:25:52

标签: python pylons repoze.who

我正在尝试使用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集成?

1 个答案:

答案 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。