0

我正在尝试使用用 Pylons 编写的 Intranet Web 应用程序进行单点登录 (SSO),我想使用 repoze.what 进行授权。我已经用 mod_sspi 配置了 Apache,它正确地验证了用户并设置了 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 集成?

4

1 回答 1

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。

于 2010-07-14T18:24:57.280 回答