auth: OAuth 令牌响应中硬编码了 expires_in: 3600,忽略了 auth.backstageTokenExpiration
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