无状态令牌过期

Posted

技术标签:

【中文标题】无状态令牌过期【英文标题】:stateless token expired 【发布时间】:2012-06-11 05:50:01 【问题描述】:

我每天都会上传几个文件,其中大约一半是成功的。一些作业返回错误...

BigQuery error in load operation: Token invalid - Invalid token: Stateless token expired

我在我的服务器上使用 IST 日期格式(如果重要的话)

 date

Mon Jun 11 11:14:23 IST 2012

成功作业的相关日志如下:

Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (1s) Current status: PENDING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (4s) Current status: PENDING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (7s) Current status: PENDING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (10s) Current status: PENDING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (14s) Current status: PENDING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (17s) Current status: RUNNING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (20s) Current status: RUNNING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (23s) Current status: RUNNING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (26s) Current status: RUNNING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (29s) Current status: RUNNING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (32s) Current status: RUNNING 
Waiting on job_9847e7bb715f40d994becff8e5f4ac1a ... (33s) Current status: DONE 

为什么我只收到一些正在上传的文件的错误?

【问题讨论】:

您好,请确保您使用的是最新版本的 Java API 客户端库(如果您使用的是 Java)。两件事:1.您如何处理访问和刷新令牌管理?您是否正在使用当前的刷新令牌请求新的访问令牌? 2. 确保您的服务器时钟正确,并与 NTP 服务器同步。 我不刷新令牌。我使用命令 ## /home/bigquery/bq load --max_bad_record=30000 -F '^' company.junelog1 /data/2012061108.log.gz oneid:STRING,ativeid:STRING,ip:STRING,cbd:STRING, country:STRING... $$ 如果我再试一次,有时我可以成功上传数据而不会出现令牌过期错误。 bq加载操作报错,是作业真的成功了,还是客户端直接报错?例如,如果您执行bq show -j <job_id_of_failure>,它会显示作业成功还是失败?我的预感是检查作业状态的循环失败,但作业实际上可能正在成功完成。 当我收到此错误时,我没有得到 job_id。上面显示的摘录只是成功作业的日志。如果我再次尝试相同的命令,有时它会成功加载数据。 【参考方案1】:

另一位 Google 员工向我指出了这个潜在问题 - 它本质上是 Python 客户端库(bq 工具基于该库)中的竞争条件。 Google OAuth 2.0 访问令牌目前的有效期为 1 小时,之后客户端 lib(或 bq)会尝试使用存储的刷新令牌获取新的令牌。但是,如果您在 1 小时边界附近开始新的数据上传,则令牌将失效。

根据这个帖子,我们很快就会推出一个新版本的底层 python lib,这应该可以解决新版本的 bq 命令行工具中的问题。

见:https://groups.google.com/forum/?fromgroups#!topic/youtube-api-gdata/n3dZqmHMyp0

【讨论】:

以上是关于无状态令牌过期的主要内容,如果未能解决你的问题,请参考以下文章

何时应该实现刷新令牌以及如何保持无状态?

如果 oauth 是无状态的,谷歌如何销毁 oauth 令牌?

JWT 用于无状态 API,但会话控制用于安全性

是否可以使用无状态逻辑(无数据库)使令牌无效?

使用不透明的访问令牌会使我的服务器有状态吗?

使用不透明的访问令牌会使我的服务器有状态吗?