支持应用后台续期,并在刷新时重新校验账号状态与最新组权限 #4
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景与影响
send 需要保持较长的本地登录会话,同时将组权限变更的生效延迟控制在约 5 分钟。目前 send 只能重新走浏览器授权来取得新组声明,造成频繁跳转,并可能打断长时间上传。send 自身将本地会话寿命绑定到 ID token exp 的问题会在 send 修复;本 issue 仅追踪 auth 缺失的后台续期与权限更新能力。
核查证据
只读检查 auth
main提交4e49a11d93e3a461d42d192ec5072d2deba9b13e,并请求线上公开 discovery(HTTP 200)。未修改 auth 配置,未执行真实用户 refresh grant,也未运行 auth 测试套件;以下测试引用为源码证据。/.well-known/openid-configuration包含refresh_tokengrant、offline_accessscope、撤销端点及 back-channel logout 支持。然而auth-web/src/apps.rs:34,307-323的受管 scope 白名单仅允许openid profile email groups;auth-web/tests/http.rs:1925明确将offline_access注册请求列为 400。auth-web/src/oauth.rs:311-321的 consent 白名单也会过滤offline_access。客户端虽配置grant_types: [authorization_code, refresh_token](apps.rs:392),仍没有完整的离线授权签发路径。auth-web/src/oauth.rs:347-364在 consent 时读取 effective groups,然后写入 Hydra 的session.id_token与session.access_token。edge/Caddyfile:54-62将/oauth2/*和/userinfo直接转发 Hydra;当前hydra/hydra.yml、compose 与 auth-web 路由未配置 token refresh hook 或其他实时权限更新路径。因此仅放开 offline_access 还不足以保证刷新后的 groups 是最新值。auth-web/src/ory.rs:214-243与http.rs:426-430的撤销调用针对 Kratos。需要明确旧 Hydra 授权何时失效,至少保证禁用账号或撤销应用资格后不能继续后台续期。线上 discovery 反映 Hydra 支持的能力,并不能单独证明当前客户端政策已允许使用;本 issue 的缺口依据为上述 auth 仓库实现。
期望行为与验收
offline_access注册、同意与 Refresh Token 签发流程,并文档化所需配置。groups字符串数组语义,以及刷新响应是否保证包含新 ID Token;send 不应凭假设接入。实现建议与范围
优先核实当前固定 Hydra 版本支持的 token hook/刷新扩展机制,复用 auth-web 已有的身份与组计算逻辑。具体 hook 配置和内部鉴权由 auth 维护者设计,不应仅因为 discovery 已列出 refresh_token 就视为完成。不要通过延长令牌寿命或永久缓存旧 groups 来替代权限更新。
能力交付并部署后,send 将按明确契约接入后台刷新;在此之前保留现有的权限新鲜度检查,不伪装成已实现无感续期。