写点什么

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:3525386
用户头像

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

关注

评论

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

生态共赢-anyRTC创业扶持计划

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

蚁架构师首推SpringBoot套餐(原理+实战+面试)

小Q

Java 学习 架构 微服务 SpringBoot 2

教育场景方案升级| 打通业务前后端,少量开发快速上线(一):互动小班

ZEGO即构

在线教育 低代码

spring-boot-route(十五)整合RocketMQ

Java旅途

Java RocketMQ Spring Boot

架构师训练营第四周作业

四夕晖

TensorFlow 篇 | TensorFlow Serving API

Alex

tensorflow keras model serving tensorflow serving api

视频会议的应用

anyRTC开发者

ios 音视频 WebRTC 直播 安卓

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(一)

陈泽云

人工智能 云计算 大数据 基础设施 国产操作系统

技术解析 | 云游戏在未来如何实现?

腾讯云音视频

开发 游戏 视频

2020年第三季度《全国移动App 风险监测评估报告》

InfoQ_11eaedef67e9

App 移动安全 个人隐私安全

【全球案例】ESL 游戏公司如何通过 Jira 定制化解决方案连接全球团队

Atlassian

项目管理 敏捷 Atlassian Jira

4年Java经验,备战两月成功拿到美团、京东、字节offer

Java架构之路

Java 程序员 面试 编程语言

LeetCode题解:145. 二叉树的后序遍历,栈,JavaScript,详细注释

Lee Chen

大前端 LeetCode

Java零基础到进阶宝典!从小白到大神,金九银十面试这届斩获23K月薪

Java架构追梦

Java 学习 架构 面试 核心知识点

1分钟将vscode撸成小霸王

gamedilong

vscode 大前端

[Go 并发编程实战课]02.Mutex 源代码

Quincy

Go 语言

WebSocket从入门到精通,半小时就够!

JackJiang

html5 网络编程 websocket 即时通讯

手把手带你玩转 openEuler | 如何安装 openEuler

openEuler

Linux 开源 操作系统 openEuler

【高并发】秒杀系统架构解密,不是所有的秒杀都是秒杀(升级版)!!

冰河

并发编程 高并发 架构设计 秒杀 异步

英特尔聚焦全栈量子研究:发布多项重磅量子计算研究成果

E科讯

TNFE-Weekly[第七十五周已更新]

莹姐🙈

小程序 大前端 周报

手把手带你玩转 openEuler | 初识 openEuler

openEuler

Linux 开源 操作系统

为什么学Go(一)

soolaugust

Go 语言

只要十步,你就可以应用表达式树来优化动态调用

newbe36524

C# netcore ASP.NET Core

搞开发,写SQL就够了

棒锤🐮

sql mybatis springboot Web框架 Rocket API

惊险的B站Java后端岗面试之旅,复盘面试经历及面试真题

Java架构之路

Java 程序员 面试 编程语言

实现一个简单的 MobX

局外人

大前端 js React

java安全编码指南之:锁的双重检测

程序那些事

java安全编码 java安全编码指南 java代码规范 java代码安全

[Go并发编程实战课]01.Mutex学习笔记

Quincy

Go 语言

vidyo在数字化办公中提供了什么便利?

dwqcmo

音视频 集成架构 解决方案 智能硬件

月薪60k的Java开发在阿里是什么级别?对技术能力有哪些要求?

Java架构之路

Java 阿里巴巴 程序员 面试 编程语言

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