直播预约通道开启!2021腾讯数字生态大会邀您共探产业发展新机遇! 了解详情
写点什么

RESTful API 认证模式

2010 年 1 月 22 日

所有人都觉得编写客户化认证协议是有必要的”, 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 年 1 月 22 日 10:3524787
用户头像

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

关注

评论

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

智慧平安小区平台建设解决方案,平安社区管理系统开发

WX13823153201

Camtasia入门技巧之视频剪辑

淋雨

视频剪辑 Camtasia 录屏软件

手慢无!Boss 直聘大厂内部面试真题整理(全彩版)流出!

Java技术架构

Java 学习 程序员 架构 面试

基础 + 进阶!汇总当下头部互联网最新面试题,不管工作几年,都可以看看!

Java技术架构

Java 学习 程序员 架构 面试

回帖送大奖 『和AI在一起』

百度大脑

人工智能 活动 大奖

PancakeSwap交易所市值管理机器人开发

艾数l53o56oloo3

市值管理机器人开发 PancakeSwap交易所 交易所机器人

数字经济时代下,区块链如何助力数字产业发展?

旺链科技

区块链 分布式存储 数字经济

支持60+数据传输链路,华为云DRS链路商用大盘点

华为云开发者社区

华为云 DRS

架构实战营模块2课后作业

hello

架构实战营

丰富题型,多模式考试系统,快考题,高效便捷!

Geek_6d9bcc

网络攻防学习笔记 Day82

穿过生命散发芬芳

网络攻防 7月日更

大数据获取客户系统软件开发源码

区块链I3O6O643Z97

大数据平台

JAVA语言异步非阻塞设计模式(应用篇)

有道技术团队

后端 网易有道

华为云MVP程云:知识化转型,最终要赋能一线

华为云开发者社区

人工智能 自然语言处理 机器学习 华为云 智能问答机器人

阿里技术团队耗时半年打造的 258W 字 Java 全栈面试题总结太香了!

Java技术架构

Java 学习 程序员 架构 面试

三年开发经验, 字节跳动抖音组离职后, 一口气拿到 15 家公司 Offer

Java技术架构

Java 学习 程序员 架构 面试

Redis 深度学习!Github 一夜爆火的 Redis 核心小册真香(原理、应用、集群、拓展、源码全都有)

Java技术架构

Java 学习 程序员 架构 面试

为什么“内存管理”漏洞值得你的绝对关注!

鉴释

代码审查 内存 代码

Go语言:参数传递中,值、引用及指针之间的区别

微客鸟窝

go golang

鉴释陈新中:源代码安全在物联网时代的重要性

鉴释

物联网 源代码

深度分享|金融行业模型管理效能提升的规划与思考

索信达控股

大数据 金融科技 金融 风险管理 营销管理

关于单元测试的那些事儿,Mockito 都能帮你解决

华为云开发者社区

测试 Mockito Mock Java 开发 模拟测试框架

从京东零售云走出来的3D数字人正在触动未来的互动世界

Geek_459987

企业培训/入职/晋升考试,快考题统一分配一键组卷!

Geek_6d9bcc

互操作性和去信任化的两难困境,到底需要治标还是治本?

CECBC区块链专委会

音视频的这些功能你知道吗?

anyRTC开发者

音视频 音视频开发 屏幕共享 音视频sdk 智能降噪

保洁阿姨分享:腾讯架构师 JDK 源码笔记,13 万字,带你飙向实战

Java技术架构

Java 学习 程序员 架构 面试

阿里“保姆级”教程, 这份 SpringBoot 应用到实战手册, 满满的精华

Java技术架构

Java 学习 程序员 架构 面试

毕业 1 年,凭借一份 “漫画” 杀进大厂?他是怎么做到的?原理篇 + 框架篇

Java技术架构

Java 学习 程序员 架构 面试

在外包做开发 3 年,为了进大厂,耗时半年,整合出 25W 字 Java 全栈面试题,这就是我的决心

Java技术架构

Java 学习 程序员 架构 面试

男默女泪!Alibaba 内部强推 JDK 源码学习指南笔记上线 2 天 Github 已星标 37k

Java技术架构

Java 学习 程序员 架构 面试

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

RESTful API认证模式-InfoQ