对金字塔使用多个身份验证策略

pyramid_authstack的Python项目详细描述


金字塔身份验证堆栈

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

cryptain authstack包使得可以叠加多个 pyramid项目中的身份验证策略。 这在以下几种情况下都很有用:

  • 您需要能够识别用户很长一段时间,而 要求最近登录才能访问个人信息。亚马逊是一个 网站这样做的例子。
  • 您希望向用户发送新闻稿,并在以下情况下自动登录用户 他们跟踪通讯中的链接,但不会自动给出 获取敏感信息。

混淆多身份验证策略很简单:创建实例 在authenticationstackpolicy对象中,添加验证策略 你想要它,然后告诉金字塔使用它。

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)

用于子策略的名称(sensitiveidentity在示例中 如果子策略可以验证 用户。这使得很容易检查哪些身份验证策略匹配 在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'])

与棱锥体多重身份验证比较

mozilla有一个类似的项目:pyramid_multiauth。有一些不同 在那个包裹和这个包裹之间:

  • 金字塔多重身份验证无法指示匹配的身份验证策略, 如果你不经常使用 添加自定义额外主体的身份验证子策略。这个可以 是固定的,但需要在不向后兼容的情况下更改api 太好了。
  • 金字塔多重身份验证复制了一些回调处理代码,而不是 重用金字塔的CallbackAuthenticationPolicy。
  • 金字塔多重身份验证允许通过pastedeploy.ini文件进行配置,该文件 金字塔AuthStack不支持。

更改日志

1.0.1-2013年8月10日

  • 修复自述文件中过时命名的使用。
  • 向构造函数添加回调参数。

1.0.0-2013年8月10日

  • 第一次释放。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在sqlite数据库中保存特定列的历史记录   java如何更改/更新timeseriechart名称(JFreeChart)   java如何将整数转换为可绘制的   汇编什么解释Java的字节码   java查找已编译的类版本号   我应该什么时候在ColdFusion应用程序中使用Java?   java当一个实体的两个字段为(unique=true)时,如何处理JPA异常?   java为什么在所有其他实例都正确的情况下返回错误的布尔值?   java Hibernate每次都准备语句   java停留在平均字长上   对Java和日语字符进行编码   java如何将导致异常的方法的错误消息传递给侦听器中的onTestFailure方法   java代码没有打印结果   java为什么私有内部接口的方法必须是公共的?   休眠发生错误。有关详细信息,请参阅错误日志。JAVAlang.NullPointerException