跳转到主要内容

使用pyramid实现多个认证策略

项目描述

Pyramid认证栈

https://travis-ci.org/wichert/pyramid_authstack.png?branch=master

pyramid_authstack包使得在pyramid项目中堆叠多个认证策略成为可能。这在几种情况下可能很有用

  • 您需要能够长时间识别用户,同时要求最近登录才能访问个人信息。亚马逊是这样做的一个例子。

  • 您想要向用户发送新闻通讯,并在用户点击新闻通讯中的链接时自动登录用户,但不自动给他们访问敏感信息的权限。

混淆多认证策略很简单:创建一个AuthenticationStackPolicy对象的实例,将其添加到您想要的认证策略中,然后告诉Pyramid使用它。

from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid_authstack import AuthenticationStackPolicy

auth_policy = AuthenticationStackPolicy()
# Add an authentication policy with a one-hour timeout to control
# access to sensitive information.
auth_policy.add_policy(
    'sensitive',
    AuthTktAuthenticationPolicy('secret', timeout=60 * 60))
# Add a second authentication policy with a one-year timeout so
# we can identify the user.
auth_policy.add_policy(
    'identity',
    AuthTktAuthenticationPolicy('secret', timeout=60 * 60 * 24 * 365))
config.set_authentication_policy(auth_policy)

用于子策略(如上例中的)的名称将被添加到主体中,如果子策略可以认证用户。这使得在ACL中检查哪些认证策略匹配变得非常简单。

class MyModel(object):
    # Only allow access if user authenticated recently.
    __acl__ = [(Allow, 'auth:sensitive', 'view')]

当您调用remember()forget()时,所有子策略都将被触发。您可以通过添加一个policies参数来过滤策略列表。在这种情况下很重要的一个用例是用户通过新闻通讯中的链接来到网站:在这种情况下您可以识别用户,但不想在没有要求额外凭证的情况下给用户访问敏感信息的权限。

from pyramid.security import remember

# Only set identity-authentication.
headers = remember(request, 'chrism', policies=['identity'])

与 pyramid_multiauth 的比较

Mozilla 有一个类似的项目:[pyramid_multiauth](https://pypi.python.org/pypi/pyramid_multiauth)。这个包和这个包之间有一些不同

  • pyramid_multiauth 没有办法指示哪个认证策略匹配,这使得它在没有始终使用自定义认证子策略(这些策略会添加一个额外的主体)的情况下无法使用。这个问题可以修复,但需要以不兼容向后兼容的方式更改 API。

  • pyramid_multiauth 重复了一些回调处理代码,而不是重用 pyramid 的 CallbackAuthenticationPolicy。

  • pyramid_multiauth 允许通过 PasteDeploy .ini 文件进行配置,而 pyramid_authstack 不支持。

变更日志

1.0.1 - 2013 年 8 月 10 日

  • 修复 README 中过时的命名。

  • 向构造函数添加回调参数。

1.0.0 - 2013 年 8 月 10 日

  • 首次发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

pyramid_authstack-1.0.1.tar.gz (5.2 kB 查看哈希)

上传时间 源代码

由以下支持