【问题标题】:Why does WebApp2 auth.get_user_by_session() change the token?为什么 WebApp2 auth.get_user_by_session() 会更改令牌?
【发布时间】:2014-08-18 12:34:26
【问题描述】:

我正在使用带有身份验证的 WebApp2 进行用户会话。我的客户偶尔会向服务器发出几乎同时的请求。第一个将使用如下所示的会话数据发出请求:

{
 'cache_ts': 1408106895, 
 'token': u'GXpsaVQh5ZWtqxJMUBpGTr', 
 'user_id': 5690665774088192L, 
 'remember': 1, 
 'token_ts': 1408034938
}

然后在调用 auth.get_user_by_session() 之后,会话返回如下:

{
 'cache_ts': 1408124980, 
 'token': u'0IVduczdGR5PkrMqNhBvzW', 
 'user_id': 5690665774088192L, 
 'remember': 1, 
 'token_ts': 1408124980
}

如您所见,令牌已更改,并且时间戳已更新。

几乎同时,发出另一个包含相同初始会话数据的请求。

{
 'cache_ts': 1408106895, 
 'token': u'GXpsaVQh5ZWtqxJMUBpGTr', 
 'user_id': 5690665774088192L, 
 'remember': 1, 
 'token_ts': 1408034938
}

但是,该令牌现在无效,因此会话数据设置为无。这会擦除用户会话,并导致很多问题。我应该使用一些设置来延长 UserToken 的寿命吗?有比 get_user_by_session() 更合适的方法吗?我想几乎同时请求具有相同会话数据的请求不应该引起巨大的问题。理想的情况是,如果 auth 收到无效或过期的令牌,它会忽略它们并抛出错误。

更新 1

希望这是简单的事情,比如将 False 传递给 get_user_by_session()。这当然会立即终止会话。

更新 2

我发现我真的只需要 user_id 字段,而且它是随 cookie 数据免费提供的。实施可以减少问题的频率。然而,这个问题实际上并没有得到解决,我希望任何熟悉这个库的人都能提供一些意见。

【问题讨论】:

    标签: google-app-engine webapp2


    【解决方案1】:

    这是由于 token_new_age 参数默认为 1 天,所以...每 24 小时令牌会更改一次。

    这是一项安全措施,因为如果有人入侵该会话,它只会在 24 小时内有效。

    参数“token_max_age”也会在消耗时间时删除令牌。

    【讨论】:

    • 那么更新令牌的适当交互是什么?是否有可能在任何给定的请求中令牌都可以更新,并且客户端和服务器应该始终在每次交互时设置 cookie?
    • 如果您不触摸会话配置默认值,则“token_new_age”默认为 24​​ 小时,“token_max_age”默认为 3 周。顺便说一句,您可以更改此默认值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2014-07-23
    • 2023-03-03
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多