#34985·backstage

auth: OAuth 令牌响应中硬编码了 expires_in: 3600,忽略了 auth.backstageTokenExpiration

作者: timo-reymann创建于 2026年7月28日更新于 2026年9月17日
标签good first issuepriority:contrib-neededarea:auth

QQ 问题标签

  • 请熟悉这个项目所用的问题标签

搜索术语

过期( I) 3600
后台切换
OidcService 过期
oauth 令牌终点已过期  在硬码中
访问令牌过期错配exp
mcp 重新校正符号过期

目前的问题没有涉及这个问题。 我发现的最近邻居有:#32645(MCP auth,但在动态客户端注册期间大约为 " 无效客户端-id " )和#32115(关闭;由于JWKS密钥旋转而故障后恢复运行)——两者都不同于 " 过期-in " 值本身是错误的。

项目区域

认证

外部一体化

不详

QQ 描述和上下文

OAuth 2.0 符号端点报告一个固定的"expires in: 3600",而不管配置的"Auth.backstage TokenExpiratation",而它返回的存取符JWT则被从该配置中得出的"expires"所印出. 当选项设定为一个小时以外的任何内容时,符号响应与它描述的符号相矛盾.

Auth.后台Token Experation'是一个有文件记载的公开计划'd选项(它出现在plugins/auth-后端/config.schema.json'和`readBackstain Token Experation'中),接受从10分钟到24小时的任何内容:

// 插件/ 自动后端/ src/ service/ readToken Experation.ts c. =3 600; (c) 计算单位:千兆克; (c) 将“E”字改为“E”字;


这个值流入了符号发行商,因此它决定了JWT的"exp":


// 插件/ 自动后端/ src/ 服务/ router. ts
后台 Token 扩展 = 读取后台 Token 扩展 ;
. . . . . . . .
order Issuer = 新托肯事实 ({)
键定义秒:后台 Token Experation,
. . . . . . . .
* ;

OidcService ' 硬码两个响应站点的公布寿命,即使服务已经有一个Config ' 实例,但两者都不参考配置:

// 插件/ 自动后端/ src/ service/ OidcService.ts: 651 (授权 代码交换) 返回{ accessToken: 符号, 符号Type:"Bearer", 过期 。 idtoken: 符号, 范围:会话.scope QQ'openid', 刷新托肯,

  • ;

// 插件/ 自动后端/ src/ service/ OidcService.ts: 681( 重新启用) 返回{ 访问Token, 符号Type:"Bearer", 终止日期 :3600, / <--同 刷新托肯,

  • ;

两者都以`Oidc Router ' 的 " expires in " 字面形式出现。

根据RFC 6749 第5.1节,`过期'是"访问符的以秒为单位的寿命". 格式化客户端缓存了那么长时间的代币,然后停止使用,所以一个被配置成活的代币,比如说,一个小时后,24小时被丢弃——剩下的23小时是无法使用的.

对无法默默恢复的客户而言,影响更严重,默认的MCP整合就是如此. `OidcService ' 只在授予的范围包含`offline-access ' 时才发出新的信号:


缩放范围 =会话. scope?.split (")? [;];
if (scopes. includings ('offline  access' ) )        
. . . . . . .

内容来源: backstage/backstage