web api 安全认证的方案(很严肃)

本贴最后更新于 2599 天前,其中的信息可能已经时移世改

当你开发了你的网站的 api,就必须对 api 的调用者进行安全认证

现在普遍的方案是(https 是必须的): 给你一个 app_id 和 secret_id

  1. 用 app_id 和 secret_id 换取临牌 token,token 有时效性,一定时间再去换一个新的
  2. 每个请求头都附带 app_id ,token 和 timestamps(时间戳),nonce(随机数),以及根据某个预设规则把这些东西加上请求内容(请求的内容可以加密)用签名算法(MD5,SHA1 或者 HMCA-MD5)搞成一个签名字符 signature,一起发送给服务端
  3. 服务端根据 token 判断是否合法的请求身份,根据 signature 判断请求的有效性(包含时间有效性,是否被篡改),然后如果内容是加密的再进行一次解密

以上方案基本是现在微信,支付宝等的概要(如果那块说的很不对,求大家马上说明)
但我仔细想想还是有如下问题

  • 第 1 步 直接传 app_id 和 secret_id 不安全,被截获了不就完了? 我觉得 secret_id 永远不能直接传送,不过好像支付宝有安全的第一步认证,加密摘要什么的,反正微信是没有,就直接传,这个不是很不好吗?
  • token 虽然有时效性,但是签名算法都是公开的,MD5,SHA1 大家都会,被截获了还是有机会短时间被盗用啊? MHAC 是不错的,但是 HMAC 利用了 secret_id,那我就很好奇了为啥要去搞个 token?

带着第二疑问我看到了七牛的 API,七牛的 API 没有什么远程获取 token 的机制,每次的 token 都是自己生成的,七牛每次的请求需要有一个凭证:这个凭证的生成办法是,对请求的 url 或者内容用 secret_id 做 HMAC 算法,然后转生 base64,加上 app_id 形成最后的凭证

也就是说根本不需要服务器提供 token,因为 HMAC 算法需要一个密钥,用 HMCA 做摘要等于起到了两个目的,1 防止篡改 2 app_id 和 secret_id 的认证,因为错误的 secret_id 无法生成出这个 app_id 的凭证,这不就等同于用户名密码的校验了?

那个为什么还需要远程获取 token 这个动作?? 个人认为这个东西有所多余了
请大家指正!!!

  • 安全

    安全永远都不是一个小问题。

    199 引用 • 816 回帖
  • token

    令牌、凭证、代币、记号,whatever...

    7 引用 • 14 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Angonger

    安全性呢?

  • 其他回帖
  • 714593351

    我感觉,token 更多的是服务控制,而不是判断请求的有效性。换取 token 主要是为了对客户端 secret 有效性做校验的,比如需要将某个 secret 失效,直接在换取 token 的时候就可以拦截。

    如果没有 token,那么需要在每个接口前增加 secret 有效性校验。

    类似网站的登录,登录后每次请求只要携带 cookie,系统就认为是登录后的请求,不需要校验用户是否有效。

    1 回复
  • 88250

    我想主要是因为 token 有时效性,服务端在需要的情况下方便控制。

  • mainlove
    作者

    七牛的 token 就是凭证 每次需要生成
    传统的 token 是一段时间内不变

    1 回复
  • 查看全部回帖

推荐标签 标签

  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 483 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 597 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    408 引用 • 3574 回帖 • 1 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 62 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    167 引用 • 1513 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 454 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 155 关注
  • V2Ray
    1 引用 • 15 回帖 • 2 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 44 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖 • 1 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 2 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    352 引用 • 1815 回帖
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    5 引用 • 107 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 9 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 228 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 25 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 660 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 398 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 27 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 536 关注