跳转到主要内容

在Plone中模拟Active Directory密码复杂性要求

项目描述

collective.pwexpiry

介绍

collective.pwexpiry 包是Plone的附加产品,它带来了在Plone中控制密码过期的功能。当需要强制门户成员遵循特定的密码策略时,它非常有用。

功能

  • 注册和定义自定义密码验证方法的可能性

  • 定义用户密码有效期的可能性

  • 检查密码是否在最后x个变体中使用过。并禁止重复使用。

  • 当密码有效期接近时,可注册自定义通知动作的可能性

  • 提供可以在命令行中定期执行的脚本(例如,通过cron)。该脚本检查用户的密码到期日期并触发已注册的通知动作(例如,向相关用户发送电子邮件)。

  • 提供保护机制,以避免在一天内对同一用户进行两次相同的提醒

  • 如果尝试了过多的无效密码,则可以将帐户锁定

安装

  1. 将 collective.pwexpiry 添加到您的 plone.recipe.zope2instance 部分的 eggs 中

    [instance]
    recipe = plone.recipe.zope2instance
    ...
    eggs =
        ...
        collective.pwexpiry
  2. 通过 portal_quickinstaller 安装产品

配置和自定义

密码有效期

密码有效期在配置注册工具中设置,默认值为90天。可以通过在自定义包的通用设置配置文件中创建包含配置代码的 registry.xml 文件轻松自定义。

<registry>
    <record name="collective.pwexpiry.validity_period">
        <value>360</value>
    </record>
</registry>

要禁用密码过期,将 validity_period 设置为 0

最后X个密码检查

可以检查新密码是否已被使用(保留最后 password_history_size 个密码散列的历史记录)。

password_history_size 默认为0,这意味着:没有对重复密码的激活检查。

您需要手动通过 registry.xml 中的注册记录激活此功能。

<registry>
    <record name="collective.pwexpiry.password_history_size">
        <value>10</value>
    </record>
</registry>

定义通知动作

默认情况下 - 定义了一个通知动作,当用户的密码有效期还剩15天时,会向用户发送通知电子邮件。但可以注册自定义方法,这些方法将根据其实现触发。

要注册自己的通知动作,您需要:
  1. 注册提供 IExpirationCheck 接口的适配器

    <configure xmlns="http://namespaces.zope.org/zope">
      <adapter
        name="last_few_days_before_expiration"
        factory=".actions.LastFewDaysBeforeExpiration"
        provides="collective.pwexpiry.interfaces.IExpirationCheck"
        for="zope.interface.Interface"
        />
    </configure>
  2. 实现适配器的 __call__notification_action 方法

    class LastFewDaysBeforeExpiration(object):
        implements(IExpirationCheck)
    
        # Trigger on number of days before password expiration
        notify_on = (7, 4, 3, 2, 1)
    
        def __init__(self, context):
            self.context = context
    
        def __call__(self, days_to_expire):
            """
            Returns True whe n the notification_action
            method have to be executed
            """
            try:
                notify_on = iter(self.notify_on)
            except TypeError:
                notify_on = (self.notify_on,)
    
            if days_to_expire in notify_on:
                return True
            else:
                return False
    
        def notification_action(self, userdata, days_to_expire):
            """
            Implementation of the notification action.
            In this case it's sendin an email notification
            """
            send_notification_email(userdata, days_to_expire)

定义自定义密码验证方法

该包允许定义您自己的密码验证方法,当用户在注册时设置初始密码或通过更改密码表单或通过密码重置机制更改实际密码时执行。

要注册自己的通知动作,您需要

1. Register adapter providing ``ICustomPasswordValidator`` interface::

    <configure xmlns="http://namespaces.zope.org/zope">
      <adapter
        name="my_password_policy"
        factory=".password_validators.MyPasswordValidator"
        provides="collective.pwexpiry.interfaces.ICustomPasswordValidator"
        for="zope.interface.Interface"
        />
    </configure>

2. Implement the adapter's ``__call__`` and ``notification_action`` methods::

     class MyPasswordValidator(object):
         implements(ICustomPasswordValidator)

         def __init__(self, context):
             self.context = context

         def validate(self, password, data):
             if len(password) < 8:
                 return _(u'Passwords must be at least 8 characters in length.')

执行通知脚本

通知脚本应每天执行一次,以检查用户的密码到期日期并触发相关通知动作。

为了方便,向 zopectl 添加了一个名为 notify_and_expire 的新命令,您只需要提供 Plone 实例的绝对路径作为唯一参数。

以下是如何从命令行执行脚本的示例

$ cd ${buildoout:directory}
$ ./bin/instance notify_and_expire /Plone

假设您的 Plone 网站ID是 Plone,位于 Zope 根目录下。

提供 SERVER_URL 和 SERVER_NAME 环境变量

电子邮件模板将尝试从请求中获取服务器 URL 和服务器名称,并且如果它可以在环境变量中找到,通知脚本已经将它们放入其中。因此,如果您想向用户提供更好的电子邮件,其中包含重置或更改密码的链接以及说明邮件来源的消息,则需要定义 SERVER_URLSERVER_NAME 环境变量。为了在 buildout 中完成此操作,您需要在 [instance] 部分中设置您的 environment-vars

如果输入太多无效密码,则锁定帐户

当安装此软件包时,将包含一个新的PAS插件,该插件将在登录时统计无效密码尝试次数。如果无效尝试次数超过可配置的阈值,则账户将被锁定一段时间。如果账户尚未被锁定,正确输入密码将重置此计数器为零。管理员可以通过更改密码来重新激活账户。

控制额外用户的属性

collective.pwexpiry软件包创建新的用户属性
  • password_date - 用户更改密码的日期

  • last_notification_date - 对用户执行最后一次通知操作的日期

  • account_locked_date - 账户被锁定的日期

  • account_locked - 布尔值,表示账户是否被锁定

  • password_tries - 错误密码尝试次数

为了能够手动控制新用户的属性,可以在以下URL下找到控制面板表单: /@@pwexpiry-controlpanel

设置锁定账户的尝试次数和锁定时间

这通过注册表中的值进行管理

  • collective.pwexpiry.allowed_tries - 允许您选择允许的尝试次数

  • collective.pwexpiry.disable_time - 允许您指定用户应锁定多少小时

待办事项

编写测试!

作者 & 联系方式

作者::
  • Radosław Jankiewicz radoslaw.jankiewicz@stxnext.pl

许可证

此软件包根据Zope公共许可证授权。

变更日志

0.15.1 (2019-12-10)

  • 不要假设用户属性中的日期已经是DateTime [frapell]

0.15.0 (2019-08-01)

  • 添加Python 3和Plone 5.2支持 [swampmonkey,frapell]

0.14.0 (2018-12-14)

  • 标准化错误消息,使其在用户被锁定或密码错误时都相同 [frapell]

0.13.0 (2018-11-08)

  • 更新i18n并添加葡萄牙语(巴西)和西班牙语翻译。 [hvelarde]

  • 弃用Plone 4.1、Plone 4.2和Python 2.6。 [hvelarde]

  • 当白名单用户列表尚未设置时,避免在密码过期插件和InvalidPasswordEntered订阅者上出现TypeError。 [csanahuja, hvelarde]

  • 恢复与Plone 4.3的兼容性。 [hvelarde]

  • 添加卸载配置文件和测试。 [hvelarde]

0.12.0 (2018-05-30)

  • 更新德语翻译 [fRiSi]

  • 重构notify_and_expire脚本来使其可以作为zopectl命令添加 [frapell]

  • 使用SERVER_URL和SERVER_NAME在电子邮件中包含附加信息 [frapell]

0.11.3 (2017-12-06)

  • 如果密码包含非ASCII字符,密码验证不会引发UnicodeDecodeError [fRiSi]

0.11.2 (2017-07-31)

  • 包括whitelist功能的升级步骤 [frapell]

0.11.1 (2017-07-31)

  • 重新发布 [frapell]

0.11 (2017-07-31)

  • 包含将用户ID列入白名单的功能,这样它们就不会过期或被锁定 [frapell]

0.10 (2017-02-21)

  • 产品现在可以在Plone 5上运行 [enfold-josh]

  • 登录弹出窗口的JavaScript仅适用于Plone 4 [frapell]

0.9.1 (2016-05-23)

  • 修复rst2html以用于pypi页面 [fRiSi]

0.9 (2016-05-23)

  • 将电子邮件模板更改为使用可定制的视图。 [pcdummy]

  • 修复notify_and_expire中用户名的编码问题。 [pcdummy]

  • 修复Plone 4.3.8的javascripts,没有更多的“ieversion()”函数。 [pcdummy]

  • 修复“密码已禁用”状态消息的翻译(这解决了#11) [fRiSi]

  • 更新德语翻译。 [pcdummy]

  • 将通知电子邮件更改为翻译文本电子邮件。 [pcdummy]

  • 在登录弹出窗口中显示“您的账户已过期”状态消息。 [pcdummy]

  • 更新德语翻译。 [pcdummy]

  • 如果将validity_period设置为0,则不使密码过期 [fRiSi]

  • 增加密码历史检查(不在最后x个密码中)。[pcdummy]

  • 仅在存在browserlayer时启用example_validator。[pcdummy]

  • 添加皮肤层,并从pwreset_form移除令人困惑的>5个字符的消息。[pcdummy]

  • 更新德语翻译并翻译example_validator。[pcdummy]

0.8.1 (2015-05-06)

  • 模板错别字 [frapell]

  • 更新意大利语翻译 [giacomos]

0.8 (2015-04-20)

  • 更新翻译 [frapell]

  • 改进控制面板工具,允许管理员解锁账户 [frapell]

0.7 (2015-03-25)

  • 忽略密码即将到期的管理员 [frapell]

  • 修复bug:如果输入了超过限制的错误密码,不要添加响应头。只有在输入正确时才这样做 [frapell]

  • 比较日期时,确保两者都考虑时区 [frapell]

  • 在检查密码中的名称和用户名时忽略大小写 [enfold-josh]

  • 修改脚本以接受路径并使用遍历来获取plone站点,因为可能它并不总是在应用根目录。[enfold-josh]

  • 重定向到$portal_url/mail_password_form而不是只重定向到/mail_password_form [enfold-josh]

  • 修改通知电子邮件以支持天数 <= 0。[enfold-josh]

0.6 (2015-03-13)

  • 为控制面板使用更友好的日期格式 [frapell]

0.5 (2014-11-28)

  • 添加i18n和意大利语翻译 [giacomos]

  • 在控制面板标题中不需要包含“控制面板” [frapell]

0.4 (2014-09-11)

  • 添加成员属性、注册表密钥、事件订阅者和PAS插件,允许在用户输入过多错误密码时阻止用户。[frapell]

  • 修补ZODBUserManager.authenticateCredentials,以便在输入有效或无效凭据时触发事件。[frapell]

  • 修补CMFPlone/RegistrationTool而不是CMFDefault/RegistrationTool。[frapell]

0.3 (2014-09-10)

  • 正确打包 [frapell]

0.2 (2013-08-18)

  • 正确pypi分类器

  • 初始代码

项目详情


下载文件

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

源分发

collective.pwexpiry-0.15.1.zip (106.7 kB 查看散列)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面