后端基础-认证与登录
后端基础-认证与登录
目录
第1章 认证与授权
1.1 认证
- 认证 Authentication:确认“你是谁”。
- 认证回答的是身份问题,不回答权限问题。
1.2 授权
- 授权 Authorization:确认“你能做什么”。
- 授权发生在“已识别用户身份”之后。
1.3 登录
- 登录是“建立身份”的业务流程。
- 登录成功后,服务端需要给客户端一个可持续识别用户的凭据。
第2章 登录态
2.1 Session
- Session 是服务端保存的会话状态。
- 浏览器通常只保存 Session ID,真正的会话数据保存在服务端。
常见链路:
- 用户登录成功
- 服务端创建 Session
- 服务端通过
Set-Cookie下发 Session ID - 浏览器后续请求自动带上 Cookie
- 服务端根据 Session ID 找到对应会话
2.2 Token
- Token 是服务端签发给客户端的一段凭据。
- 客户端后续请求通常通过
Authorization请求头携带 Token。
text
Authorization: Bearer <token>
- Token 方案常见于前后端分离、移动端、开放接口。
2.3 Session 与 JWT
- Session:状态保存在服务端,便于主动失效
- JWT:状态更多体现在客户端持有的令牌,横向扩展更方便
- 没有绝对更优,取决于系统边界和风格
2.4 Cookie 与 Authorization
- Cookie 是浏览器自动携带机制。
Authorization是显式请求头,常由前端代码主动附加。- Session 常和 Cookie 搭配,JWT 常和
Authorization搭配。
第3章 JWT
3.1 JWT
- JWT 是一种 Token 格式,不等于所有 Token。
- JWT 通常由三段组成:头部、载荷、签名。
结构上可以近似理解成:
text
header.payload.signature
-
header:声明签名算法等元信息 -
payload:承载身份声明数据 -
signature:基于密钥和算法算出的签名 -
服务端校验签名后,可以确认内容没有被篡改。
-
JWT 适合表达身份声明,不适合放敏感明文数据。
-
JWT 一旦签发,撤销通常比 Session 更麻烦。
3.2 payload
payload是写进 JWT 的数据字典。- 它承载的是“这张 token 要表达什么身份声明”。
常见最小示例:
json
{
"sub": "study_user",
"exp": 1740000000
}
3.3 sub
sub= subject。- 表示“这个 token 属于谁”。
- 常见写法是放用户名、用户 ID 或其他稳定用户标识。
3.4 exp
exp= expiration time。- 表示“这个 token 到什么时候过期”。
- 服务端校验 token 时,如果当前时间超过
exp,就应判定 token 失效。
3.5 SECRET_KEY
SECRET_KEY是服务端用于签名和验签的私密密钥。- 它不是登录密码,也不是用来隐藏 payload 内容的字段。
- 它的主要作用是防止客户端伪造或篡改 token。
如果 SECRET_KEY 泄露,别人就可能伪造合法 token。
3.6 algorithm
algorithm是 JWT 的签名算法名。- 常见如:
HS256HS384HS512
当前很多单体服务或教学项目会先用 HS256。
HS256表示使用 HMAC-SHA256- 生成 token 和校验 token 都依赖同一个
SECRET_KEY
3.7 Bearer Token
- Bearer Token 指“谁持有谁可用”的访问令牌。
- 后续请求通常放在:
text
Authorization: Bearer <token>
- 服务端会先提取 token,再验证签名、过期时间和用户身份。
第4章 登录方式
4.1 短信登录
- 短信登录是验证码登录的一种实现。
- 核心不是短信,而是“一次性验证码校验 + 登录态签发”。
常见流程:
- 用户提交手机号
- 服务端生成验证码
- 服务端把验证码写入缓存并设置过期时间
- 短信服务商发送验证码
- 用户提交手机号和验证码
- 服务端校验验证码
- 校验通过后签发 Session 或 Token
4.2 验证码存储
- 验证码通常放 Redis 这类带过期能力的存储。
- 键一般和手机号、业务场景绑定。
- 验证通过后应立即失效,避免重复使用。
4.3 防刷
- 短信登录必须做频率限制。
- 常见限制维度:
- 单手机号发送频率
- 单 IP 请求频率
- 单设备请求频率
- 还需要限制验证码尝试次数,避免暴力猜测。
第5章 权限与风险
5.1 权限
- 权限校验发生在“已识别用户身份”之后。
- 常见权限粒度:
- 是否登录
- 角色
- 资源归属
- 操作范围
示例:
- 普通用户只能修改自己的资料
- 管理员可以查看全部用户
5.2 常见风险
- 把敏感信息直接放进 JWT 载荷
SECRET_KEY过短或泄露- token 没有过期时间
- 验证码不过期
- 验证通过后验证码仍可重复使用
- 登录接口没有限流
- 只做前端权限判断,不做后端权限校验
关联
- Cookie、Header、状态码位置:
- 接口文档如何声明鉴权要求: