Web 端可以用 HttpOnly Cookie,但 App 端不能用。
所以多端统一登录时,不能只依赖 HttpOnly Cookie,需要 Token 方案兼容两端。
为什么 Web 可以用 HttpOnly Cookie?
因为:
-
浏览器天然支持 Cookie
-
浏览器会自动携带 Cookie
-
HttpOnly 能防止 XSS 读取 Token
-
SameSite 能防 CSRF
所以 Web 端用 HttpOnly Cookie 是最安全、最推荐的方式。
为什么 App 不能用 HttpOnly Cookie?
因为:
-
App 没有浏览器 Cookie 机制
-
App 无法自动携带 Cookie
-
App 无法读取 HttpOnly Cookie(因为 JS 也读不到)
-
App 需要自己存储 Token(通常是安全存储,如 Keychain / Keystore)
所以 App 端必须使用:
-
Authorization: Bearer <token>
-
或者 本地安全存储 + 手动附带 Token
那多端统一登录怎么设计?
你可以这样回答(非常专业):
多端统一登录时,我们通常采用 JWT + 双 Token(Access + Refresh) 的方案。 Web 端把 Token 放在 HttpOnly Cookie 中,App 端把 Token 放在安全存储中,两端都使用同一套 Token 体系,但存储方式不同。
架构如下:
| 端 | Token 存储方式 | 请求携带方式 |
|---|---|---|
| Web | HttpOnly Cookie | 浏览器自动携带 |
| App | 安全存储(Keychain/Keystore) | Authorization Header |
统一登录的关键点(面试官会继续问)
你可以这样讲:
1. Token 体系统一
-
Access Token:短期有效(15min~2h)
-
Refresh Token:长期有效(7~30 天)
-
两端都用同一套 Token
2. Web 和 App 的存储方式不同
-
Web:HttpOnly Cookie(防 XSS)
-
App:安全存储(防逆向、Hook)
3. 后端统一验证 Token
-
不关心 Token 来自 Cookie 还是 Header
-
只验证签名、过期时间、黑名单等
4. 退出登录 / 强制下线
-
使用 Redis 黑名单
-
两端都能立即失效
面试官可能追问:
“那 Web 和 App 怎么同时支持?”
你可以这样回答:
后端提供两种 Token 读取方式:
Web:从 Cookie 中读取
App:从 Authorization Header 中读取
认证逻辑统一,读取方式不同。
这句话非常加分。
最终总结(你可以直接背)
多端统一登录时,Web 可以用 HttpOnly Cookie,但 App 不能使用 Cookie 机制,因此不能只依赖 HttpOnly Cookie。
我们通常采用 JWT + Access/Refresh Token 的统一认证体系:
Web 把 Token 放在 HttpOnly Cookie 中
App 把 Token 放在安全存储中
后端统一验证 Token,不关心 Token 来自 Cookie 还是 Header,从而实现多端统一登录。

2240

被折叠的 条评论
为什么被折叠?



