6

Pyramid 函数的“秘密”参数究竟是什么pyramid.authentication.AuthTktAuthenticationPolicy文档说它是“用于 auth_tkt cookie 签名的(字符串)。必需。” 该教程说它是“一个字符串,表示由该策略表示的'身份验证票'机器使用的加密密钥”。

什么是 auth_tkt cookie 签名?这是什么“身份验证票”机制?这个秘密应该是我作为哈希值存储在数据库中的东西吗?我真的很困惑。

4

2 回答 2

15

tkt auth cookie 是多条信息的安全散列,包括用户名和可选的时间戳,但不包括用户密码。一旦通过身份验证,您将这样的 cookie 提供给用户,每次用户返回时,您只需再次提取用户名并知道它是同一用户。

但是,为了保证此 cookie 的安全,您需要有一个服务器端机密。只有拥有该秘密的服务器才能创建这些 cookie;如果攻击者掌握了它,他可以为任意用户生成身份验证 cookie,而无需知道这些用户的密码。

策略的secret参数是服务器端密钥;这就像您的服务器的主密码。如果您为您的站点运行多个进程(并且通常使用 WSGI),则需要使其在您的进程中保持一致,以确保每个进程都可以验证 cookie。您可以在配置文件、源代码或数据库中指定它;这取决于您需要多大的灵活性、您的安全策略以及您是否需要与其他系统共享秘密。

您可以使用相同的标准与域中也需要对您的用户进行身份验证的其他系统共享密钥。例如, Apache 有一个mod_auth_tkt模块,Plone 使用相同的标准,通过共享密钥,您可以跨不同的 Web 应用程序为您的用户提供单点登录。

请注意,更改密钥意味着现有会话无效,用户必须重新进行身份验证。

在任何情况下,现有 cookie 的生命周期都是有限的;timeout如果您在策略上配置参数,嵌入的时间戳会限制它被接受为有效的时间。设置超时和补发时间是个好政策;任何在超时内重新访问您的应用程序的用户都将被重新发布一个带有新时间戳的新 cookie,以保持他们的会话新鲜。这样,如果您的用户不返回,您的会话 cookie 会自动过期,并且他们的 cookie 不能在以后被攻击者重用。该reissue参数可让您控制新令牌的发布速度;在几秒钟内重新访问您的服务器reissue不会产生新的令牌。

于 2012-10-07T10:06:31.873 回答
2

据我所知,秘密参数只是一个字符串,用作创建 cookie 的盐。你可以放任何你想要的东西。将它放在您的配置文件中应该绰绰有余。将其保存在数据库中可能有点过大,但如果您想使创建的任何内容无效,我想更改密钥将使所有 cookie 和在更改之前创建的会话无效。

于 2012-10-07T02:25:09.253 回答