金字塔AuthTktAuthenticationPolicy秘密参数

Avi*_*ner 5 python authentication pyramid

金字塔pyramid.authentication.AuthTktAuthenticationPolicy功能的"秘密"参数究竟是什么?该文件说,这是"(字符串)用于auth_tkt cookie的签名.必需." 该教程说它是"一个字符串,表示由此策略代表的'身份验证票'机器使用的加密密钥".

什么是auth_tkt cookie签名?什么是"认证机票"机器?这个秘密应该是我作为哈希存储在数据库中的东西吗?我真的很困惑.

Mar*_*ers 15

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

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

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

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

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

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