跳转到主要内容

基于会话的Zope tkt身份验证

项目描述

概述

plone.session 为 Zope 站点实现了安全的会话管理。

在其默认配置中,plone.session 使用一个基于用户 ID 和 PAS 插件中存储的密钥的 HMAC SHA-256 安全加密散列来验证会话。该散列通过用户 ID 和 PAS 插件中存储的密钥生成。否则,cookie 格式与 Apache 的 mod_auth_tkt 相同。对于与原始 mod_auth_tkt 或其他兼容实现的单点登录,将 mod_auth_tkt 属性设置为 true。这将引发一个基于 MD5 的双重散列方案。您需要在所有服务器上使用相同的密钥。

与其他会话管理系统相比,这种方法具有以下优点

  • 密码不会在每个请求中通过 cookie 发送到服务器,这与 Cookie Auth Helper 所做的方式不同。

  • 它不需要任何 ZODB 写操作来存储会话,正如 Session Crumbler 所需要的。这使得它可以很好地扩展。

  • 它允许您通过更新密钥来使所有现有的用户认证 cookie 失效。

  • cookie 仅在 timeout 属性指定的期间内有效。

这种方法也有一些缺点

  • 如果用户的密码被更改或禁用,会话标识符将继续工作,这使得难以锁定单个用户。

  • 用户必须启用 cookie。

会话 cookie 用于跟踪会话;这意味着只要用户保持浏览器打开(并且没有明确注销),会话就会保持打开状态,直到达到超时限制。这可以通过将插件中的 timeout 属性设置为 cookie 应在登录后保持有效的秒数来更改。

plone.session 不能 免除您为您的网站设置 TLS(也称为 HTTPS)的要求。

tktauth.py 实现了 core mod_auth_tkt 功能。它是自包含的,可能对其他框架有用。

使用 plone.session

plone.session 只负责处理已认证用户的会话。这意味着它不能单独使用:您需要一个其他 PAS 插件,例如标准的 Cookie Auth Helper 来处理认证。

用户认证后,plone.session 可以通过 PAS 的 credentials update 机制接管。

配置选项

要启用站点之间或与其他 mod_auth_tkt 系统之间的登录,通过 Zope 管理界面设置共享密钥。您可以通过同一页面管理 plone.keyring 密钥。

以下属性可以通过 属性 选项卡设置

cookie 有效超时(以秒为单位)

之后,会话无效,用户必须重新登录。将设置为 0 以使 cookie 无限期有效。请注意,当用户文件夹启用缓存时,cookie 的有效性可能不会在每个请求上进行检查。

刷新间隔(以秒为单位,-1 禁用刷新)

这控制刷新 CSS max-age(见下文)。

使用与 mod_auth_tkt 兼容的散列算法

与其他实现的兼容性,但代价是使用更弱的散列算法。

cookie 名称

要使用哪个 cookie。这还必须在 credentials_cookie_auth 插件上设置。

cookie 生存期(以天为单位)

这使得 cookie 在打开和关闭浏览器之间持久。

cookie 域(为默认值留空)

通过将Cookie域名设置为.example.com,Cookie可以在www1.example.com和www2.example.com之间共享。

Cookie路径

Cookie设置有效的路径(默认为/)。

票据刷新

为了启用短有效期超时,您必须确保Cookie定期更新。一个选项是将mod_auth_tkt设置在您的站点之前,并设置一个TktAuthTimeoutRefresh。从plone.session 3.1版本开始,还提供了一个独立的javascript解决方案,可以作为Plone中的可选插件安装。

工作原理

可选插件安装一个CSS资源,在加载时更新Cookie。这允许每次页面加载时都更新Cookie。虽然这个CSS不能被代理服务器缓存,但它可能在客户端缓存一段时间。通过控制CSS资源的max-age,可以控制浏览器实际获取CSS的频率,从而控制Cookie更新的频率。

对于短超时(例如15或30分钟),用户在Cookie失效之前可能还没有加载新页面。包含了一个javascript,它会在用户在页面上活跃时(如按键或鼠标移动)定期轮询Cookie刷新CSS。如果刷新CSS的最大年龄已过,则浏览器将重新获取CSS,并更新Cookie。轮询间隔可以在刷新CSS查询字符串的minutes参数中配置,默认为5分钟。

票据删除

当登录会话跨域名共享时,当用户从Plone站点注销时,注销所有域名可能会有所帮助。在/logged_out页面上加载伪CSShttp://example.com/portal_path/acl_users/session/remove?type=css以删除票据。

与IIS的单点登录

对于有Windows域用户的内网设置,可以配置IIS使用集成Windows身份验证作为外部登录提供者,即使对于运行在Linux/Unix服务器上的站点。

要求

  • 您需要一个运行IIS的Microsoft Windows服务器。最好是Windows Server 2003或更高版本。

  • 服务器必须是您想要验证用户所在的Windows域的成员。它本身不需要是Active Directory服务器。

  • 您的站点应该使用pas.plugins.ldap来使用与用户源相同的Active Directory。

Python

  • Windows服务器需要安装Python 2.7Python Win 32扩展构建>=216

  • tktauth.py(从本包的plone/session中)的副本放入

    C:\Python26\Lib\site-packages\
  • 按照如何为IIS配置Python的说明进行操作。在第二点2.d中使用

    Executable: "C:\Python27\python.exe -u %s %s"

    代替。这将确保文件以通用换行模式打开。您可以选择只为特定的网站而不是整个IIS配置这些设置。相应地调整设置,并首先详细创建网站,如下一章所述。

IIS

  • 找到并打开IIS管理控制台。

  • 通过进入Web Sites文件夹并使用右键菜单创建一个新的Web Site。您应该会得到一个向导,要求您回答各种问题

    Description: SSO login service
    
    TCP port: 80
    
    Path: c:\Inetpub\sso
    
    Allow anonymous access to this Web site: <not checked>
    
    Permissions: Read, Run scripts, Execute
  • 如果您正在运行IIS 6,您需要转到Web服务扩展文件夹,将Active Server Pages设置为允许。否则,您将得到相当无用的404未找到错误,针对asp脚本。

IIS脚本

  • login.asptest.asp脚本(从本包的iis-login文件夹中)复制到网站的根路径(例如C:\Inetpub\sso)。

  • 您需要修改login.asp中找到的SECRET常量,以与在plone.session的管理密钥选项卡上设置的相同共享密钥。

  • 修改login.asp中的ALLOWED_SITES常量,包括您Plone站点的URL。

  • 修改login.asp中的DEFAULT_NEXT常量,使其指向您Plone站点之一的logged_in URL。

  • 通过访问http://LOGONSERVER/test.asp来确认访问权限已正确配置。

配置浏览器以允许自动登录

浏览器必须配置为信任登录服务器,以便自动发送用户认证数据。

默认情况下,Internet Explorer会将登录信息发送到位于Intranet区域内的服务器,只要使用它的内部名称访问该站点(例如http://LOGONSERVER/login.asp)。如果使用完全限定的域名或IP地址访问该站点,则必须将其明确添加到受信任站点列表中。

Firefox配置信息可在此文章中找到。

配置您的Plone站点

请确保您已设置Active Directory认证,并且可以使用您的当前Windows用户名登录。

通过Zope界面设置以下配置选项

  • /Plone/acl_users/session中。在管理密钥选项卡上设置共享密钥。

  • /Plone/portal_properties/site_properties中设置external_login_urlhttp://LOGONSERVER/login.asp

  • /Plone/portal_properties/site_properties中设置external_login_iframe为true。

针对在Windows XP下进行测试的开发者说明

  • IIS可以使用Windows XP安装CD作为附加组件安装。

  • IIS管理控制台位于

    Start -> Control Panel -> Administrative Tools -> Internet Information Services
  • pywin32安装程序已为我配置IIS,因此无需遵循如何配置Python以用于IIS的说明

  • 我找不到如何设置单独的站点,因此将asp脚本直接放在C:\Inetpub\wwwroot - 默认网站

  • 从IIS管理控制台,选择“默认网站”。您应该在右侧窗格中看到login.asptest.asp。对于每个文件,右键单击“属性”。在文件安全选项卡上,单击匿名访问和身份验证控制的“编辑…”。取消选中匿名访问并选中基本身份验证(作为后备使用)和集成Windows身份验证

  • 通过访问https://#/test.asp来确认IIS认证按预期工作。

  • login.aspplone.session管理密钥中设置密钥。

  • login.asp中的SITE_URL设置为https://#:8080/Plone(或您的站点的地址)。

  • 添加一个与您的Windows登录名相同的Plone用户(例如:管理员),这可以避免设置Active Directory。

  • 按照上面的部分配置您的Plone站点,但将登录表单设置为https://#/login.asp

变更日志

4.0.4 (2023-09-08)

错误修复

  • 密码重置后不要设置认证cookie,除非用户已认证。否则匿名用户将被立即登录,即使密码重置后自动登录为false。修复问题3835。[maurits] (#3835)

内部

  • 更新配置文件。[plone devs] (7723aeaf)

4.0.3 (2023-03-21)

错误修复

  • 移除对Products.CMFPlone的循环依赖。使用从plone.base移动的导入。[jensens] (#38)

内部

  • 更新配置文件。[plone devs] (a533099d)

4.0.2 (2023-02-07)

错误修复

  • 声明所有依赖。[gforcada] (#1)

4.0.1 (2023-01-30)

内部

  • 更新代码以符合当前Plone元标准。[gforcada, maurits] (#1)

4.0.0 (2022-12-02)

错误修复

  • Plone 6.0.0的最终版本 (#600)

4.0.0b2 (2022-08-31)

新功能

  • 创建每个用户的密钥环,以便在注销时进行会话失效(服务器端注销)。[david-batranu] (#26)

  • 将Cookie属性SameSite设置为“Lax”。(#29)

4.0.0b1 (2022-07-22)

错误修复

  • 将plone-session包更新为依赖于plone包而不是不再存在的jquery包。[davisagli] (#27)

4.0.0a1 (2022-04-08)

重大更改

  • 为Plone 6注册单个资源包以支持我们的可选刷新功能。plone.app.upgrade中包含此升级步骤,否则我们将留下部分包。移除我们自己的升级步骤和配置文件,因为在从Plone 5.2迁移时不再需要。[maurits] (#24)

3.7.5 (2020-06-24)

错误修复

  • 修复与Products.CMFPlone的硬依赖间接引用(plone.session不得从中导入)。[jensens] (#20)

  • 仅在当前用户是请求的用户时设置会话。[maurits] (#57)

3.7.4 (2020-04-22)

错误修复

  • 小型的打包更新。(#1)

3.7.3 (2019-04-29)

错误修复

  • 修复由重命名profiles.pyhiddenprofiles.py引起的名称冲突。[jensens] (#16)

3.7.2 (2019-02-13)

错误修复

  • 移除ZopeTestCase的最后痕迹。[gforcada] (#14)

3.7.1 (2018-09-28)

错误修复

  • Python3兼容性 [ale-rt, pbauer]

3.7.0 (2018-04-03)

新功能

  • 使用资源注册表进行JS/CSS注册 [jensens]

错误修复

  • 修复#11:伪CSS文件不再在合并的遗留包中加载。现在可选的基于JS的自动刷新支持再次工作。[jensens]

  • 现代化README。[jensens]

3.6.2 (2018-02-02)

错误修复

  • 加强默认会话超时。这解决了Plone安全内部问题#126(严重程度低,非关键)。现在会话超时与mod_auth_tkt相同:2小时。这遵循德国BSI(信息技术安全联邦办公室)的建议。有关现有站点的信息,请在此处进行调整:https://HOST/acl_users/session/manage_propertiesForm Plone安全团队遵循BSI并建议管理员更改其现有Plone站点的设置。[jensens]

  • 添加Python 2 / 3兼容性 [vincero]

3.6.1 (2016-12-02)

错误修复

  • 在安装列表中隐藏卸载配置文件。[jensens]

3.6.0 (2016-05-26)

  • 添加卸载配置文件。[maurits]

3.5.6 (2015-07-27)

  • 清理:Pep8、plone风格约定、更好的可读性。[jensens]

3.5.5 (2015-04-29)

  • createTicket的默认编码以与unicode用户_id兼容。[puittenbroek]

3.5.4 (2015-03-21)

  • 将测试从PloneTestCase移动到plone.app.testing。[tomgross]

3.5.3 (2013-03-05)

  • 撤销对validateTicket默认编码的意外更改。[davisagli]

3.5.2 (2012-12-09)

3.5.1 - 2012-11-02

  • 处理用户id的编码字符串。[elro]

  • 添加MANIFEST.in。[WouterVH]

  • 修复在64位Mac OS下使用Python 2.4生成不正确mod_auth_tkt散列的问题。[MatthewWilkes]

3.5 - 2011-03-19

  • 在开发模式下禁用安全Cookie,以便于本地测试。[hannosch]

3.4 - 2011-03-02

  • 将metadata.xml添加到默认配置文件。[vincentfretin]

3.3 - 2010-12-30

  • 更新login.asp以匹配Plone 4.1 SSO登录表单功能。[elro]

  • 修复删除功能。[elro]

3.2 - 2010-12-14

  • 移除external_login方法,可以使用正常的logged_in脚本。[elro]

  • 修复刷新功能。[elro]

3.1 - 2010-11-11

  • 移除SessionPlugin.validate(ticket)方法,它不再需要。[elro]

3.1b1 - 2010-10-18

  • 会话刷新。[elro]

  • SessionPlugin.validate(ticket)方法。[elro]

  • 正确关闭<input>标签(chameleon兼容性)[swampmonkey]

3.0 - 2010-07-18

  • 更新包元数据。[hannosch]

3.0b5 - 2010-06-13

  • 确保加载正确的元ZCML。[hannosch]

  • 避免在Zope 2.13下的弃用警告。[hannosch]

  • 移除对GPL许可证的Products.PloneTestCase的依赖。[hannosch]

3.0b4 - 2010-05-23

3.0b3 - 2010-04-09

  • 示例IIS登录表单和文档。这是基于Hanno和我为Centrepoint在Jarn的工作。[elro]

  • 支持通过外部表单进行身份验证,可能是运行在IIS服务器上并使用集成Windows身份验证的表单。[elro]

3.0b2 - 2010-03-09

  • 将setupSession前缀设置为下划线,该方法不应在TTW中可用。[elro]

  • 在authenticateCredentials中捕获ComponentLookupError。[elro]

3.0b1 - 2010-03-05

  • 添加回带有设置共享密钥功能的哈希管理UI。[elro]

  • 添加cookie域和ticket有效期超时属性。[elro]

  • 使用mod_auth_tkt格式cookie来为我们提供会话有效期超时。默认情况下,我们使用更安全的HMAC SHA-256哈希方案。一个与其它mod_auth_tkt实现兼容的基于MD5的方案是可选的。[elro]

  • 移除源组件间接引用。[elro]

3.0a2 - 2009-11-13

  • 移除意外重新合并的哈希管理UI。[davisagli]

3.0a1 - 2009-04-04

  • 避免在Python 2.6中对sha模块的弃用警告。[hannosch]

  • 在额外中声明测试依赖。[hannosch]

  • 指定包依赖关系。[hannosch]

  • 修复了与新的keyring后端一起工作的剩余测试。[hannosch]

  • 修复了HashSession源中的组件查找调用。[davisagli, hannosch]

  • 更新默认(哈希)会话源以使用plone.keyring来管理秘密。[wichert]

2.1 - 2009-02-04

  • 使用ManageUsers权限保护setupSession调用。修复了可能的权限提升。[maurits]

  • 使cookie有效期可配置。由Rok Garbas提供的补丁。修复了http://dev.plone.org/plone/ticket/7248 [wichert, garbas]

2.0 - 2008-07-08

1.2 - 2007-02-15

  • 使用binascii base64方法对会话Cookie进行编码/解码。这可以防止在长cookie中插入换行符。[wichert]

1.1 - 2007-09-11

  • 在会话标识符中使用用户ID而不是登录名。这有一个副作用,即解决了一个PAS中的bug,该bug导致当使用的登录名与另一个登录名不完全匹配时,我们将用户混淆。[wichert]

1.0 - 2007-08-15

  • 第一个稳定版本 [wichert]

项目详情


下载文件

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

源分发

plone.session-4.0.4.tar.gz (35.8 kB 查看散列值)

上传时间

构建分发

plone.session-4.0.4-py3-none-any.whl (28.7 kB 查看散列值)

上传时间 Python 3

由以下机构支持

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