From bb34108831e2a63889fcb1a738aaf96c2da38f28 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Fri, 14 Aug 2026 21:42:52 +0800 Subject: [PATCH] =?UTF-8?q?fix=F0=9F=90=9B:=20=E7=A7=BB=E9=99=A4=20refresh?= =?UTF-8?q?=5Ftoken=20=E6=8E=A5=E5=8F=A3=EF=BC=8C=E4=BF=AE=E5=A4=8D=20toke?= =?UTF-8?q?n=20=E5=8F=AF=E6=97=A0=E9=99=90=E7=BB=AD=E6=9C=9F=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close #820 GET /api/v1/refresh_token 用业务 token 即可换取新 token,而续期上限 MaxRefresh 依据的 orig_iat 在每次续期时被一并重置,上限永远无法到达 —— token 一旦泄露即等同于永久访问权,且无任何吊销手段。 该路由此前还位于 CasbinExclude 中,不受 Casbin 约束,任何角色的已登录用户 都可调用。 官方前端从未使用它:store 中虽有 refreshToken action,但全仓库无一处 dispatch,属死代码。移除不影响正常登录与鉴权流程。 破坏性变更:自行调用该端点实现续期的使用者需改为重新登录。正确的无感续期 应在 go-admin-core 中区分 access token 与 refresh token 后重新实现,不应 沿用此路由。 --- app/admin/router/sys_router.go | 11 +++++++++-- common/middleware/settings.go | 1 - 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/admin/router/sys_router.go b/app/admin/router/sys_router.go index b713e4b0..268d4bc4 100644 --- a/app/admin/router/sys_router.go +++ b/app/admin/router/sys_router.go @@ -69,8 +69,15 @@ func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle v1 := r.Group("/api/v1") { v1.POST("/login", authMiddleware.LoginHandler) - // Refresh time can be longer than token timeout - v1.GET("/refresh_token", authMiddleware.RefreshHandler) + // GET /api/v1/refresh_token 已移除,原因见 issue #820: + // 该接口用业务 token 即可换取新 token,而续期上限 MaxRefresh 依据的 + // orig_iat 在每次续期时被一并重置,上限永远无法到达 —— token 一旦泄 + // 露即等同于永久访问权。它此前还位于 CasbinExclude 中,任何角色的已 + // 登录用户都能调用,不受权限约束。 + // + // 官方前端从未调用该接口(store 中的 refreshToken action 无人 dispatch), + // 移除不影响正常使用。若确需无感续期,应在 go-admin-core 中区分 + // access token 与 refresh token 后重新实现,而非沿用此路由。 } registerBaseRouter(v1, authMiddleware) } diff --git a/common/middleware/settings.go b/common/middleware/settings.go index daf8d305..248a640f 100644 --- a/common/middleware/settings.go +++ b/common/middleware/settings.go @@ -24,7 +24,6 @@ var CasbinExclude = []UrlInfo{ {Url: "/api/v1/menuids", Method: "GET"}, {Url: "/api/v1/roleMenuTreeselect/:roleId", Method: "GET"}, {Url: "/api/v1/roleDeptTreeselect/:roleId", Method: "GET"}, - {Url: "/api/v1/refresh_token", Method: "GET"}, {Url: "/api/v1/configKey/:configKey", Method: "GET"}, {Url: "/api/v1/app-config", Method: "GET"}, {Url: "/api/v1/user/profile", Method: "GET"},