如何在金字塔中使用外部Auth系统

时间:2015-03-30 08:38:26

标签: python authentication pyramid

上下文

我的应用程序依赖外部服务进行身份验证,python API具有函数authentiate_request request实例作为参数,并返回结果dict:

  • 如果auth成功,dict包含3个键:

    • 成功:真实
    • 用户名:alice
    • cookies:[记住用户所需的set-cookie标头列表]
  • 如果不成功:

    • 成功:假
    • 重定向:url将用户重定向到基于Web的身份验证的位置

现在,调用此函数相对较贵(下面是HTTP POST)。

问题

我是Pyramid安全模型的新手,我正在努力如何使用现有/正确编写AuthenticationPolicy我的应用,因此它使用我的身份验证服务,并且不会调用它&# 39;每个会话的API多次(在auth成功案例中)?

1 个答案:

答案 0 :(得分:0)

将自定义身份验证与Pyramid集成有两种方法: - 为Pyramid编写自己的身份验证策略(我还没有这样做) - 编写自己的中间件来处理你的auth问题,并在Pyramid中使用RemoteUserAuthenticationPolicy(我已经这样做了)

对于第二个,你编写一些标准的wsgi中间件,在那里整理你的自定义身份验证业务,然后写入wsgi env。金字塔授权将正常工作,Pyramid auth系统从wsgi env的'REMOTE_USER'设置中获取用户值。

我个人喜欢这种方法,因为很容易将不同的应用程序包装在您的中间件中,并且很容易将其关闭或交换掉。虽然不是你所要求的答案,但这可能是比你正在尝试的更好的方法。