news 2026/1/29 5:50:38

如何设计安全的 Web API 访问

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何设计安全的 Web API 访问

这张图其实在讲“安全访问 Web API”最常见的两条路:**Token(令牌)**和HMAC(签名)。它们解决的核心问题不一样:Token 更像“拿到一张通行证”,HMAC 更像“每次递交文件都盖防伪章”。


1) 图上半部分:Token-based authentication(令牌认证)

流程解读(图中 1→4):

  1. Client 把用户名/密码(或一次性验证码、OAuth 授权码等)发给Authentication Server

  2. 认证通过,Auth Server 返回token(常见是 access token,可能还有 refresh token)

  3. Client 携带 token 去请求Web Server

  4. Web Server 校验 token(本地验签或去 Auth Server introspect),通过后返回资源

怎么把它设计“安全”(关键点在“token 被偷怎么办?”):

  • 必须全程 HTTPS/TLS:否则 token/密码在路上就是“裸奔”。

  • Access Token 要短命:比如 5–15 分钟;并配套Refresh Token(更长,但更严格保护)。

  • 最小权限(Scopes/Claims):token 里只给需要的能力,例如read:pdfconvert:pdf,别一把梭“管理员”。

  • 绑定目标(aud/iss):校验iss(谁签发)/aud(给谁用)/exp(过期)/nbf(生效时间)。

  • Token 存储要分场景

    • 浏览器端:优先 HttpOnly + Secure Cookie(降低 XSS 直接读 token 风险),再配合 CSRF 防护。

    • 原生/桌面/服务端:放系统安全存储(Windows Credential Manager、DPAPI、Keychain 等),不要写明文配置。

  • 可撤销与轮换:refresh token 支持撤销(用户退出/泄露/风控),服务端支持密钥轮换(JWT 的kid)。

  • 防暴力破解与风控:登录接口要限速、验证码/2FA、异常登录告警。

一句话:Token 方案更适合“用户登录态 / 第三方授权 / 多服务统一身份”。


2) 图下半部分:HMAC authentication(签名认证)

流程解读(图中 1→7):

  1. Client 向 Auth Server 申请API key(通常包括key_id+secret

  2. Client 拿到 API key(secret 只给一次/或可重置)

  3. Client 本地用 secret 生成hmac A

  4. Client 发送请求 + 签名到 Web Server

  5. Web Server 用同一 secret 生成hmac B

  6. 对比 hmac A 和 hmac B(相同则通过)

  7. 返回资源

图里还强调:签名输入通常包含
appId、URI、body、HTTP method、timestamp、nonce+secret→ HMAC signature
这叫请求不可篡改(method/路径/body 被改签名就对不上)+防重放(timestamp/nonce)。

怎么把 HMAC 设计“安全可用”(关键点在“签名串怎么拼、重放怎么防”):

  • 定义“规范化请求(canonical request)”:双方必须完全一致,否则会出现“我算的签名永远不对”的噩梦。常见做法:

    • method 大写

    • path 原样(或统一 URL decode/encode 规则)

    • query 参数按 key 排序、统一编码

    • body 用SHA-256(body)放入签名(避免大 body 直接拼接)

  • 把 timestamp + nonce 纳入签名,并做校验

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/25 8:59:10

算法竞赛备考冲刺必刷题(C++) | AcWing 1169 糖果

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

作者头像 李华
网站建设 2026/1/25 1:41:54

算法竞赛备考冲刺必刷题(C++) | 洛谷 P5960 差分约束

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

作者头像 李华
网站建设 2026/1/27 11:52:21

工业智能体的五级跃迁:从对话到执行的智能化革命

当很多企业还在满足于“问答式”AI时,一场从“对话”到“行动”的AI革命已然来临。如何判断您应用的AI解决方案的成熟度?本文借鉴行业权威分级模型,将AI从L1到L5的演进路径首次清晰呈现,帮助您定位自身,看清通往智能制…

作者头像 李华
网站建设 2026/1/27 16:54:10

C语言实现isalpha函数功能(附带源码)

一、项目背景详细介绍在 C 语言开发中&#xff0c;字符处理是最常见、最基础、但也最容易被忽略的功能之一。特别是在文本解析、编译器开发、词法分析器、脚本解释器、格式化输入、用户输入校验等大量应用中&#xff0c;我们需要判断一个字符是否为字母。C 标准库 <ctype.h&…

作者头像 李华
网站建设 2026/1/27 19:23:37

C语言实现多种方法求解定积分(附带源码)

一、项目背景详细介绍定积分&#xff08;Definite Integral&#xff09;是数学分析和工程计算中的核心内容之一。无论是物理中的速度—位移求积、统计学中的概率密度积分、机器学习中的连续损失积分、还是工程中的面积、体积、能量等计算&#xff0c;都离不开定积分的求解。在实…

作者头像 李华
网站建设 2026/1/28 18:02:06

C语言实现骑士旅游算法(附带源码)

一、项目背景详细介绍骑士旅游&#xff08;Knights Tour&#xff09;是经典的棋盘问题之一&#xff1a;在一个 mnm \times nmn 的国际象棋棋盘上&#xff0c;骑士&#xff08;Knight&#xff09;按 L 形规则移动&#xff08;两步直 一步横&#xff0c;或两步横 一步直&#x…

作者头像 李华