产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

RESTful API 认证模式

  • 2010-01-22
  • 本文字数:1071 字

    阅读完需:约 4 分钟

所有人都觉得编写客户化认证协议是有必要的”, George Reese 说,这也是他在使用云提供者和 SaaS 提供商们提供的 API 进行编程的过程中的领悟之一。在一篇博文中他提出了一组旨在适用于任何 REST 的认证需求的标准。

George 曾开发过各种各样的 Web 服务 API,他发现每一种 API 都需要一种特定的认证机制。

我已经疲于在这种事情上上浪费脑细胞了,比如某提供商 A 的要求是在 URL 编码之前或之后为查询字符串进行签名。我也早已厌倦了提供商们诸如要求使用用交互用户的凭证进行 API 调用的这样的认证要求了。

他勾勒了 REST API 的认证机制的设计规则。他说,“让我们变得简单些:如果你不加密 API 调用,你甚至连假装安全都做不到”。

1。 所有的 REST API 调用必须运行在使用可信的 CA 签名过的证书的 HTTPS 之上。所有客户端与服务端交互之间必须要验证服务端证书。

通过使用由可信机构签名的证书,SSL 可以保护你免受“中间人”攻击。中间人攻击的手段是在客户端和服务端之间插入一个代理进而窃听“加密的”通信。

如果你不验证服务端的 SSL 证书,你就无法知道谁在接收你的 REST 查询请求。

2。所有的 REST API 调用应该通过专门的 API 密钥完成,该密钥由标识成分和共享密钥两部分组成。系统必须允许一个指定客户端拥有多个活动的 API 密钥并能方便地让个别密钥失效。

前半部分的重点是发起 REST 请求的系统不应是某个交互用户……REST 认证的的是程序而不是人,它支持比人使用的用户名 / 密码更强大的认证手段。

后半部分的意思是,每个 REST 服务器应该支持每个客户端拥有多个 API 密钥。该需求使得孤立潜在危害和当危害发生时解决问题更为简单。[…] 当应用被破坏时,你也需要一种完善的方式铺开替换的 API 密钥。

3. 所有的 REST 查询必须通过签名令牌签名的方式进行认证,该过程通过对按小写的字母顺序排序的查询参数使用私钥进行签名。签名应在查询字符串的 URL 编码前完成。

换言之,你不能将共享密钥作为查询串的一部分进行传递,而应使用它进行签名。签名后的查询串看起来应该是这样的:

GET /object?timestamp=1261496500&apiKey=Qwerty2010&signature=abcdef0123456789

被签名的串是“ “/object?apikey=Qwerty2010&timestamp=1261496500” ”,而签名是应用 API 密钥的私钥所得到的 HMAC-SHA256 哈希值。

他承认在大部分类 REST 的 RESTFul API 方案中,认证几乎肯定被看作是次要的问题。然而,在文章的结论中他建议读者“最好参照别人的例子,而不应自创认证模式”。

InfoQ 的读者们,请别吝惜你的意见。最初的博文地址是: O’Rielly 社区博客.


查看英文原文: RESTful API Authentication Schemes

2010-01-22 10:3525396
用户头像

发布了 184 篇内容, 共 79.4 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

思特奇加入openGauss开源社区,共同推动数据库产业生态发展

openGauss

数据库 开源社区

openGauss社区理事长江大勇:openGauss联合产业界创新,共建开源数据库根社区

openGauss

开源数据库

测试管理和领导力秘诀,12+ BAT 大厂测试经理的干货经验汇总

测吧(北京)科技有限公司

测试

预约直播 | 流批一体机器学习算法平台Alink介绍及应用

阿里云大数据AI技术

深度学习

石原子科技正式加入openGauss社区

openGauss

openGauss社区七月运作报告

openGauss

软件测试 | 测试开发 | 测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)

测吧(北京)科技有限公司

测试

面试官:说说你对事件循环的理解

CoderBin

JavaScript 前端 Promise Vue 3 10月月更

软件测试 | 测试开发 | 测试开发基础 | Python 算法与数据结构面试题系列一(附答案)

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | Python 算法与数据结构面试题系列二(附答案)

测吧(北京)科技有限公司

测试

大数据ELK(十六):Elasticsearch SQL(职位查询案例)

Lansonli

ES 10月月更

UData查询引擎优化-如何让一条SQL性能提升数倍

京东科技开发者

sql 数据 查询引擎 数据服务 udata

空间数据库开源路,超图+openGauss风起禹贡

openGauss

软件测试 | 测试开发 | 基于 JMeter 完成 Dubbo 接口的测试

测吧(北京)科技有限公司

测试

OneFlow的大模型分片保存和加载策略

OneFlow

机器学习 深度学习 分布式

openGauss开源2周年,破解数据库生态痛点

openGauss

云和恩墨:让商业数据库时代的价值在openGauss生态上持续繁荣

openGauss

观测云正式加入openGauss社区

openGauss

九鑫智能正式加入openGauss社区

openGauss

阿里P8爆款《SpringBoot+vue全栈开发实战项目》笔记太香了

Geek_0c76c3

Java 数据库 开源 架构 开发

仅靠一文便火爆全网!开源阿里绝密Java面试笔记:霸榜GitHub

Geek_0c76c3

Java 数据库 开源 程序员 开发

Web3流支付迎来新质变,Zebec开放Zepoch节点申请

鳄鱼视界

软件测试 | 测试开发 | 毕业 2 年,涨薪 100%,从创业小团队到某中厂测试开发(附面试真题)

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | Dubbo 接口测试原理及多种方法实践总结

测吧(北京)科技有限公司

测试

成长计划校园极客秀|基于OpenHarmony的智能阳台

OpenHarmony开发者

OpenHarmony

墨天轮沙龙 | 宝兰德詹年科 :基础软件中间件,让业务人员更好专注业务逻辑的实现

墨天轮

数据库 基础软件 中间件 消息中间件 数据库中间件

要求必须使用强密码

源字节1号

一名在读研究生的自白:我为什么会沉迷于openGauss 社区?

openGauss

建木v2.5.6发布

Jianmu

DevOps 持续集成 jenkins CI/CD gitops

C++学习---cstdio的源码学习分析07-重新打开文件流函数freopen

桑榆

源码刨析 10月月更 C++

凭借一份“面试真经pdf”,我四面字节跳动,拿下1-2级offer

Geek_0c76c3

Java 数据库 开源 架构 开发

RESTful API认证模式_SOA_Dilip Krishnan_InfoQ精选文章