网易首页 > 网易号 > 正文 申请入驻

三个请求同时撞上令牌过期,登录为什么会变成一场竞速?

0
分享至

三个请求同时发出,恰好赶上访问令牌过期。如果每个请求各自去刷新,第一次交换就可能让另外两个正要使用的刷新令牌失效。一个登录功能,就这样变成了请求之间的竞速。


Codename One 是一个开源框架,用同一套 Java 或 Kotlin 代码库构建原生 iOS、Android、桌面和 Web 应用。本周的安全工作,把客户端和后端围绕这些令牌转换衔接了起来:客户端可以协调续期,服务端可以轮换令牌,测试则能验证真实请求被拒之后会发生什么。

把访问规则放在路由旁边

后端在 com.codename1.backend.security 下提供了 Spring 风格的安全链。一条链先选择它处理哪些请求,再对它们做认证和授权。安全指南示例中的这段代码,用 JWT 作用域保护了一个 API:

@Bean
@Order(1)
SecurityFilterChain api(HttpSecurity http) {
http.securityMatcher("/api/**")
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/orders/**").hasAuthority("SCOPE_orders:read")
.anyRequest().authenticated())
.sessionManagement(session ->
session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()));
return http.build();
}

配置可信的签发方和 API 期望的受众。指南中的配置键包括 cn1.security.oauth2.resourceserver.jwt.issuer-uri 和 cn1.security.oauth2.resourceserver.jwt.audiences。受众检查在未配置时是可选的,所以当多个服务共享同一个签发方时,要有意识地设置它。

没有 SecurityFilterChain bean 的后端就没有安全层。添加依赖并不会让路由变安全。无状态链也不会自带 CSRF 过滤器,除非你主动要求。基于会话的浏览器应用威胁模型不同,需要相应的会话与 CSRF 配置。

@PreAuthorize 这类方法规则会被编译成检查。它们可以作用于自调用和私有方法,因为构建过程把它们织入方法本身,而不是依赖调用经过运行时代理。表达式语言是一个受支持的子集;ACL、@PostAuthorize 和任意表达式求值不在其中。

给客户端指定唯一的续期负责人

把已安装的应用注册为公共 OAuth 客户端,使用精确的重定向 URI 和 PKCE。嵌在应用里的客户端密钥不可能保持机密。配置好 OidcClient 之后,为 API 基础 URL 安装一个授权器:

OidcRequestAuthorizer authorizer =
new OidcRequestAuthorizer(client).install("https://api.example.com/v1");
authorizer.addSignInRequiredListener((source, reason) -> showSignIn());
authorizer.load().ready(saved -> {
if (saved == null) {
showSignIn();
} else {
showNotes();
}
});

这是一段应用示例:client 已用你的提供方和令牌存储配置好;showSignIn() 和 showNotes() 是你的 UI 方法。用 SecureStorageTokenStore 做平台保护的持久化。明文存储回退是一个显式选项,不该被应用悄悄启用来让错误消失。

授权器先匹配协议、主机和端口,再匹配完整的路径段。/v1 包含 /v1/notes,但不包含 /v10。它覆盖普通的 ConnectionRequest 调用、REST 构建器以及通过网络层接入的生成客户端。

续期默认在过期前启动。交换期间排队的请求会等待它的结果。如果带令牌的请求收到 401,授权器可以刷新并重试一次,调用方拿到最终响应。刷新被拒会结束会话、清除已存令牌并调用登录监听器。如果你的请求从流中写入请求体,在依赖重试之前,先确认你的实现能再次提供它。

对于 Codename One 跟随的重定向,令牌会在注册来源或路径之外被移除。当前的 iOS 移植版让系统在应用代码看到之前就跟随重定向。把受保护的 API 重定向限制在你控制的主机内;不要推断所有传输层都有相同的重定向拦截点。

选择你的部署能共享的状态

后端包含表单登录、HTTP Basic、API 密钥、JWT 资源服务器、OAuth 登录和授权服务器支持。MFA 包含 TOTP 和恢复码;passkey 端点使用 WebAuthn。这些是各自独立配置的机制,不是一个能让所有部署都变安全的开关。

多个实例无法共享内存中的令牌仓库或限流器。当你的部署形态如此时,要声明数据库支持的存储。cn1.security.schema.enabled=true 应放在模块构建时的 application.properties 里,它会注册安全迁移。它创建表,但不会替你选择 JDBC 存储。

刷新令牌和一次性代码必须原子消费。否则两个实例可能同时接受同一个密钥。JDBC 实现用条件数据库操作及其影响行数来做这些判断。TOTP 密钥在配置的加密密钥下密封;密码哈希和一次性恢复码有各自的存储规则。

打包后的服务器只链接其安全链触及的机制。一个验证令牌的 API 不必携带登录页面和密码存储。这是显式配置与死代码消除带来的结果,但它并不减少审查已启用规则的必要性。

测试登录成功之后的失败

端到端客户端测试连接 HelloCodenameOne 后端。BackendTokenRefreshTest 故意用一个服务器未签名的访问令牌替换原令牌。它检查生成客户端在续期后收到一次成功响应、刷新令牌发生轮换,以及重用已花费的刷新令牌会结束会话。

这比一个总是返回已认证用户的 mock 证明了更多东西。它把客户端的网络与令牌状态,同服务器的令牌端点和受保护路由放在一起检验。

凭据与重定向测试会明确报告浏览器跳过,因为浏览器拥有那些 cookie 和重定向。一套全绿的端口测试要结合这些跳过项来读。WebAuthn PRF 桥接覆盖使用 Chromium 的虚拟认证器;这并不代表每个硬件认证器都支持该扩展。

SAML、LDAP、不透明令牌内省以及若干授权服务器扩展不在本版本范围内。后端安全指南和客户端身份指南规定了受支持的表面。PR #5961 把这些部分连接起来。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
宪法规定:中国公民享有人身自由权利。

宪法规定:中国公民享有人身自由权利。

abc350514
2026-09-13 16:14:58
日本被制裁的没脾气了?IMF最新预测:2027年日本GDP或将跌至全球第六

日本被制裁的没脾气了?IMF最新预测:2027年日本GDP或将跌至全球第六

大卫聊科技
2026-10-19 15:19:00
30号台风路径走向有变:去哪?新一轮3天冷空气、大暴雪暴雨确定

30号台风路径走向有变:去哪?新一轮3天冷空气、大暴雪暴雨确定

环球科学猫
2026-10-19 11:57:59
细思极恐!女子住酒店意外撞落装饰画,一掀惊现“暗门”,有楼梯不知通往何处;酒店称系设备间,“免房费”前提是“删差评”

细思极恐!女子住酒店意外撞落装饰画,一掀惊现“暗门”,有楼梯不知通往何处;酒店称系设备间,“免房费”前提是“删差评”

新民晚报
2026-10-19 18:28:35
勿轻信泰国旅游!落地即控制全员被贩卖,真实黑幕远比想象中恐怖

勿轻信泰国旅游!落地即控制全员被贩卖,真实黑幕远比想象中恐怖

兵鉴史
2026-10-16 22:32:00
“人没出息,一看便知”:没出息的男人,多半喜欢做这两件事

“人没出息,一看便知”:没出息的男人,多半喜欢做这两件事

心理观察局
2026-07-31 06:50:08
微信资金池接近万亿!可这笔巨款,腾讯一分钱都不能随便花

微信资金池接近万亿!可这笔巨款,腾讯一分钱都不能随便花

青史卷中人
2026-10-17 00:43:22
民调:巴西总统决选,博索纳罗获得46.8%的选票,卢拉为45.9%

民调:巴西总统决选,博索纳罗获得46.8%的选票,卢拉为45.9%

麓谷隐士
2026-10-19 00:15:04
张晓东被免去山西省统计局局长职务,已履新任山西省政协经济委员会副主任;曾挂职任霍州市委常委、副市长

张晓东被免去山西省统计局局长职务,已履新任山西省政协经济委员会副主任;曾挂职任霍州市委常委、副市长

大风新闻
2026-10-19 22:11:06
及时止损是对的!昔日米兰顶级双飞翼,如今早已泯然众人矣

及时止损是对的!昔日米兰顶级双飞翼,如今早已泯然众人矣

里芃芃体育
2026-10-19 00:30:17
更好维护中小投资者权益,证监会明确支持、鼓励实施先行赔付

更好维护中小投资者权益,证监会明确支持、鼓励实施先行赔付

贝壳财经
2026-10-19 21:10:03
过火面积等于3个东京!日企高管引燃边境草原大火,日媒集体沉默

过火面积等于3个东京!日企高管引燃边境草原大火,日媒集体沉默

行者聊官
2026-10-18 09:23:21
好炸裂,女生发帖哭诉跟男友在一起后开房都要AA,活得不如鸡,网友说:他跟你A,你就把B收好,不要让他C!

好炸裂,女生发帖哭诉跟男友在一起后开房都要AA,活得不如鸡,网友说:他跟你A,你就把B收好,不要让他C!

黯泉
2026-10-19 17:08:09
“吃人”的哀牢山照样闯!中国把机器狗送去,20米之外有了新发现

“吃人”的哀牢山照样闯!中国把机器狗送去,20米之外有了新发现

近史谈
2026-10-17 09:58:58
本来要扔掉的“旧行李箱”,竟被老妈盘活了!这脑洞我也是服

本来要扔掉的“旧行李箱”,竟被老妈盘活了!这脑洞我也是服

抠搜侠
2026-10-19 13:45:17
研究发现:吃一次阿司匹林,就等于给血管清一次淤,真的假的?

研究发现:吃一次阿司匹林,就等于给血管清一次淤,真的假的?

医学科普汇
2026-10-19 22:25:12
去一家只有25人的小公司面试,老板说我们从不加班。入职第二周我发现,全公司最贵的不是工资单,是每天六点准时熄灯的办公室

去一家只有25人的小公司面试,老板说我们从不加班。入职第二周我发现,全公司最贵的不是工资单,是每天六点准时熄灯的办公室

纯洁的微笑
2026-10-10 09:16:55
印尼股市雪崩,高盛预警!

印尼股市雪崩,高盛预警!

格隆汇
2026-10-19 15:00:05
个人收入要开始严查?2026年起如果账户收入超过这个数,注意下准没坏处。

个人收入要开始严查?2026年起如果账户收入超过这个数,注意下准没坏处。

巢客HOME
2026-10-13 05:10:03
1944年,八路军活捉了冈村宁次的侄子,日军拿40余名干部加一车武器来换,结果人回去后日军高层后悔不已:早知道不救了!

1944年,八路军活捉了冈村宁次的侄子,日军拿40余名干部加一车武器来换,结果人回去后日军高层后悔不已:早知道不救了!

饭小妹说历史
2026-10-18 22:33:59
2026-10-19 23:00:49
硅屿手记
硅屿手记
有态度网友ytd
222文章数 83关注度
往期回顾 全部

科技要闻

王晟:近千亿资金涌入后 具身智能开始退烧

头条要闻

男子在稻城高反死亡 多人称其姐姐不愿出钱请马帮救援

头条要闻

男子在稻城高反死亡 多人称其姐姐不愿出钱请马帮救援

体育要闻

从NBA退役10年后,他真去警局上班了

娱乐要闻

奚梦瑶回应重返维密:还是很开心的

财经要闻

黄奇帆之子往事:从广微系到魏桥的跳跃

汽车要闻

不知道二代海鸥多好玩? 上赛道跑两圈 很过瘾的

态度原创

亲子
教育
旅游
房产
公开课

亲子要闻

39万消费者突然涌入Babycare直播间

教育要闻

AD=10,BC=20,求四边形面积

旅游要闻

千城百县看中国丨河南开封:菊香满城宋韵浓

房产要闻

最新房价:海口,三亚齐跌!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版