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

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时间   java以适当的方式更新jLabel和jTextField   java如何从PQ(单链表)中删除最大值   java可以通过任何方式找出哪些NSF文件属于Domino服务器   java Velocity 2不会设置属性   如何使用java流迭代索引映射列表   maven依赖项在编译期间工作,但在java运行时失败。lang.NoClassDefFoundError&java。lang.ClassNotFoundException   java有没有办法完全隐藏Web应用程序代码?   Android appcompat v7 21库中的java FadingActionBar错误   Eclipse/com中的java AdMob。谷歌。安卓gms。ads.AdView   java My Service表示它正在运行,但其状态尚不清楚,似乎没有绑定   java无法启动Apache Tomcat Web应用程序容器   JDK:java中的命名约定。可丢弃的   Spring SerSecurity中的java身份验证错误   Maven:使用JDK8编译Java7   java在使用ExecutorService时如何管理内存?   comm.jar通信串行端口java   java LibGDX创建动画