代码之家  ›  专栏  ›  技术社区  ›  Neil Williams

如何使用repoze.who/repoze.what和SPNEGO?

  •  0
  • Neil Williams  · 技术社区  · 14 年前

    我正在尝试用一个用Pylons编写的intranet web应用程序进行单点登录(SSO),我想使用repose.what进行授权。我用mod\u sspi配置了Apache,它正确地验证了用户并设置了REMOTE\u user环境变量。但是,我不知道如何说服repose.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 方法从未被框架调用。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Gus    14 年前

    如果预先设置了REMOTE_USER变量(例如,由web服务器),repose.who将不做任何事情,甚至不调用已注册的插件。

    至于repose.what v1,因为它是从repose.who插件设置的,这意味着repose.what凭据将不可用,因此用户将始终是匿名的;这在repose.what 2(开发中)中不是问题。

    要使一切按预期工作,可以保留编写的标识符,并将remote\u user\u key参数传递给setup\u auth:

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

    嗯。