oauth-provider: 刷新重放可能使后继实例变得可用
作者: andreiguzga创建于 2026年9月17日更新于 2026年9月17日
□这个适合GitHub吗?
- 是的,这个适合GitHub
□再现.
PostgreSQL与Prisma适配器的定型赛程,再现出刷新接吻的家族无效赛. 请求仍然通过真正的 " /oauth2/token " 终点执行;唯一的排程控制就是为接班人的 " oauth RefreshToken " 一行“创建”适配器。
配置 OAuth 提供方,提供授权代码和刷新式赠款、 " 离线-访问 " 、旋转和 " 新鲜的Token ReuseInterval: 0 " 。
- 获得 " R0 " 牌子。
- 作为请求A开始赎回 " R0 " 。
- 允许A赢得标记为 " R0 " 旋转/重新显示的被保护父母更新。
- 在接续者刷新行 " R1 " 之前插入暂停A。
- 将`R0 ' 再次作为请求B。
- B观察旋转的代号,称家庭无效,返回`无效'。
- 恢复A. 插入 " R1 " 并返回成功的象征性反应。
- 重新编号`R1'。
最小排程草图 :
create=上下文.adapter.create.bind(context.adapter); 页面存档备份,存于互联网档案馆. 上下文. adapter.create = aync (输入) {{ 如果(输入.model QQ"oauth RefreshToken" 输入.data.clientId QQ客户端ID) { 输入( C) ; 等待恢复; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 返回原始创建( 输入) ;
- ;
cont 旋转=赎回(R0); 等待暂停; 期望(( 等待赎回( R0 ) )) status. to Be( 400); 释放( ); 下一位=等待(等待旋转).json(); 期望 (( 等待赎回( ext. refresh token) )). toBe( 400); // 接收 200
相关的1.7.5来源是[`packages/oauth-productioner/src/token.ts'](https://GitHub.com/better-auth/blob/v1.7.5/procages/oauth-productioner/src/token.ts)。 它仍然以“TODO(无效-家庭-种族)”和“FIXME(限制性-家庭-无效)”来记录这种互通:父母比较和互通、家庭删除、后继插入和访问切入不共享一个数据库交易。
□ 当前对预期行为
预期:在重新使用旋转的刷新令牌被检测到并完成家族失效后,在受损的家族中不会使用任何令牌. 重新开放`R1 ' 必须返回`无效-赠款'。
实际:请求B返回`无效',但在请求A删除当前可见的家族后插入`R1'。 `R1'然后与HTTP 200成功赎回。
根据上面的时间表,这是决定性的,它不同于普通的并发轮换,其中被看守的家长更新正确选择一名得分者.
□你用什么版本的"更好的奥思"?
转载于 " 更好[email protected] " 和 " 更好-auth/[email protected] " 。 对最新的`1.7.5'来源进行了审查,并保留了同样的非交易序列和明确的种族TODO/FIXME。 完全复制没有在1.7.5上重播.
□ 系统信息
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
OS:达尔文 25.6.0 arm64
节点: 22.210.
平时:112.1分
数据库:PostgreSQL
适配器:Prisma 6.19.3
框架:Next.js 16.3.4
试验跑道:□ 哪些地区受到影响?
- 后门
- 包裹
□ Auth 配置 . . . . . . .
内容来源: better-auth/better-auth