如何 0 成本启动全员 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:3525865
用户头像

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

关注

评论

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

这个bug,你中招了吗!!!

石臻臻的杂货铺

kafka 后端 11月月更

【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」

码界西柚

log4j logback 全链路追踪 11月日更 MDC

这一次,带你深入浅出Go语言切片和数组

闫同学

Go 11月月更

10道不得不会的 Java容器 面试题

JavaPub

Java 面试 后端

Java | IO流缓冲流和转换流

陌上

Java 编程 11月月更

Java | IO流数据流和标准输出流

陌上

Java 编程 11月月更

2022一线大厂10w字面试总结,每日刷几道,明年金三银四稳了

程序员小毕

spring 程序员 JVM 架构师 java面试

【LeetCode】无重复字符的最长子串题解

Albert

算法 LeetCode 11月月更

Python进阶(五十三)Flask Web开发实现将表单渲染成HTML

No Silver Bullet

Python flask web开发 11月月更

美团技术官手写的精品SpringBoot笔记,涵盖99%知识点,强到离谱

小小怪下士

Java spring 程序员 springboot

10道不得不会的 SpringBoot 面试题

JavaPub

Java 后端 springboot

3年Java研发,突击30天,从14K变成了30K

程序知音

Java java面试 大厂面试 java架构 后端技术

拿下大厂?这几道jvm面试题必须要懂

钟奕礼

Java 程序员 java面试 java编程

K8S环境的Jenkin性能问题处理

程序员欣宸

Kubernetes jenkins 11月月更

Java | IO流文件专属流

陌上

Java 编程 11月月更

Java中的String类常用方法

共饮一杯无

Java string 11月月更

云原生系列 【轻松入门容器基础操作】

叶秋学长

云原生 沙箱实验 11月月更 操作手册

计算机网络:VLAN基本概念与原理

timerring

计算机网络 VLAN 11月月更

Python冷知识:如何找出新版本增加或删除了哪些标准库?

Python猫

Python

集合工具类Collections指南,以及Comparable和Comparator排序详解

共饮一杯无

Java 集合 11月月更

2022年最新版68道Redis面试题,20000字干货,赶紧收藏起来备用!

钟奕礼

Java 程序员 java程序员 java面试 java编程

三面头条 + 四面阿里 + 五面腾讯拿 offer 分享面经总结

程序知音

java面试 大厂面试 java架构 后端技术 Java面试八股文

面试中如何才能拿到阿里 P7 的职级?

Java永远的神

Java 阿里巴巴 程序员 架构师 程序员晋升

【C语言】int 关键字

謓泽

11月月更

【LeetCode】找到最高海拔Java题解

Albert

算法 LeetCode 11月月更

一文搞懂MySQL表字段类型长度的含义

闫同学

MySQL 数据库 11月月更

Java 后端 100多道面试题,多看点题,没坏处!

钟奕礼

Java 程序员 java面试 java编程

仅hashmap一道面试题我就搞定了面试官成功入职面试官:我裂开了

钟奕礼

Java java面试 java编程 程序员、

从基础到实战,阿里巴巴高并发系统设计全彩版手册限时开源

Java全栈架构师

程序员 面试 程序员人生 高并发 架构师

极客时间运维进阶训练营第四周作业

9527

2022全网最全最新Java面试题-独家内部教材

钟奕礼

Java 程序员 java面试 java编程

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