Python 金字塔AuthTktAuthenticationPolicy机密参数

Python 金字塔AuthTktAuthenticationPolicy机密参数,python,authentication,pyramid,Python,Authentication,Pyramid,Pyramid的Pyramid.authentication.AuthTktAuthenticationPolicy函数的“secret”参数到底是什么?表示它是“(一个字符串),用于auth_tkt cookie签名。必需)。”表示它是“一个字符串,表示此策略表示的“身份验证票证”机制使用的加密密钥” 什么是auth_tkt cookie签名?这是什么“认证票”机制?这个秘密应该是我存储在数据库中的散列还是什么?我真的很困惑。据我所知,秘密参数只是一个用于创建cookie的字符串。你想放什么就

Pyramid的
Pyramid.authentication.AuthTktAuthenticationPolicy
函数的“secret”参数到底是什么?表示它是“(一个字符串),用于auth_tkt cookie签名。必需)。”表示它是“一个字符串,表示此策略表示的“身份验证票证”机制使用的加密密钥”


什么是auth_tkt cookie签名?这是什么“认证票”机制?这个秘密应该是我存储在数据库中的散列还是什么?我真的很困惑。

据我所知,秘密参数只是一个用于创建cookie的字符串。你想放什么就放什么。把它放在配置文件中就足够了。将其保存在数据库中可能有些过分,但是如果您想使创建的任何内容无效,我想更改机密将使更改之前创建的所有cookie和会话无效

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

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

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

您可以使用相同的标准,与域中也需要验证用户身份的其他系统共享该秘密。Apache有一个
mod\u auth\u tkt
模块,例如,Plone使用相同的标准,通过共享秘密,您可以跨不同的web应用程序为用户提供单一登录

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

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