切换·Esc 返回

登录鉴权Authentication

数据与账号
确认用户是谁,并维持登录状态

登录鉴权通过密码、验证码或第三方账号确认身份,再用 Cookie、Session 或 Token 记住登录状态。密码不能明文保存;登录成功后,还要由权限控制 Authorization判断用户能做什么。

账号证明 验证身份 登录态
你是谁?Authentication

什么时候用

  • 优先采用成熟身份服务或框架方案,不自己发明密码系统
    成熟方案已经处理关键细节
    密码 / 验证码身份服务安全会话
  • 为登录 Cookie 设置合适的 HttpOnly、Secure 和 SameSite
    登录 Cookie 的常见保护
    HttpOnly脚本不可读Secure只走 HTTPSSameSite限制跨站携带
  • 登录失败使用模糊提示,避免泄露账号是否存在
    失败提示不泄露账号状态
    不推荐该邮箱不存在 推荐账号或密码错误
  • 退出登录时让服务端会话或令牌真正失效
    退出要让凭证真正失效
    会话有效服务端撤销再次请求 401

什么时候不用

  • 数据库明文保存密码:数据泄露会直接暴露用户账号
    密码不能明文入库
    email: oil@example.compassword: 123456
    数据库泄露后,所有密码会直接暴露
  • 把 JWT 当加密保险箱:内容通常只是编码,仍可能被读到
    JWT 内容通常可以解码查看
    header.payload.signaturepayload: { "email": "oil@example.com" }
    不要在里面放密码、令牌等敏感信息
  • 只在前端 localStorage 里写 isLoggedIn=true
    改本地变量不能证明身份
    控制台修改isLoggedIn = true 服务端检查没有有效会话 · 401
  • 登录接口没有限速:容易被批量猜密码
    没有限速的登录接口
    1 分钟10,000 次尝试结果可持续猜密码
组成结构 · Anatomy
身份凭证服务端验证登录状态
1身份凭证Credential密码、一次性验证码或第三方平台返回的身份结果
2验证Verification服务端核对凭证、限速并处理失败,不相信前端自己宣布登录成功
3登录状态Session用安全 Cookie 或受保护 Token 让后续请求能证明是同一位用户
常见变体 · Variants
Cookie SessionCookie Session
Set-Cookie: session=...
传统网站常见,浏览器自动携带 Cookie
TokenBearer Token
Authorization: Bearer ...
移动端或独立 API 常见
第三方登录OAuth Login
Continue with GitHub
把身份验证交给成熟平台
典型使用场景
邮箱密码登录
邮箱密码验证成功后建立登录状态
登录
Session✓ 已建立
短信或邮箱验证码
一次性验证码验证码只在短时间内有效
剩余时间04:32尝试次数1 / 5
验证
使用 GitHub / Google 登录
第三方登录把身份验证交给成熟平台
使用 GitHub 继续使用 Google 继续
平台返回身份结果,本站再建立自己的会话
退出与登录过期
退出与过期会话失效后不能继续访问
点击退出服务端撤销 Session再次访问 → 401