写点什么

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

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

关注

评论

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

Java的异常处理

java易二三

异常处理 java 编程 #编程

一文熟知存储 – 从磁盘到文件,到数据库,到分布式环境集中式存储,再到分布式数据库

邹志全

数据库 分布式事务 分布式系统

刘奇:经典数据库亟需跃迁,TiDB 不是“平替”

PingCAP

数据库 TiDB pingCAP

倪光南院士在 PingCAP 用户峰会的现场致辞

PingCAP

数据库 TiDB pingCAP

软件开发必读!华为云软件开发生产线CodeArts深度体验指南

华为 软件开发 华为云

学习SAFe大规模敏捷开发培训有什么好处?

顿顿顿

Scrum 敏捷开发 SAFe框架

几种验证端口开启的方法

林十二XII

百度商业AI技术创新大赛区域赛落幕,各大高校科技新秀角逐复赛

百度Geek说

人工智能 百度 AIGC 企业号 7 月 PK 榜

PingCAP 唐刘:携手中国用户,打造世界级产品

PingCAP

数据库 TiDB pingCAP

HashMap | 利用白话文讲解其底层知识点

派大星

java 编程

结合线上线下环境,提供产品的服务...

Bonaparte

产品 产品经理 产品设计 产品思维 产品服务

Python案例实现|租房网站数据表的处理与分析

TiAmo

Python 数据分析 爬虫

保护 TDengine 查询性能——3.0 如何大幅降低乱序数据干扰?

爱倒腾的程序员

数据库

Amazon Redshift Serverless – 现已正式推出新功能

亚马逊云科技 (Amazon Web Services)

Amazon

Java框架——SSM框架增删改查

java易二三

SSM框架 java 编程

深入探析数智时代下的分布式系统架构设计

不在线第一只蜗牛

AI 低代码 分布式架构 数智时代

点云标注在自动驾驶中的优化策略

数据堂

点云标注在自动驾驶中的难点

数据堂

【专业 TypeScript 实战】15 个高级技巧,开创卓越开发之路!

汽车之家客户端前端团队

什么是供应链金融?定义集

zhengzai7

金融科技 供应链金融

文心大模型3.5国际评测拿下7个满分,大二学生1分钟AI作画估值百万!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 文心大模型

LLM Data Pipelines: 解析大语言模型训练数据集处理的复杂流程

Baihai IDP

人工智能 LLM 白海科技 数据集处理流程

如何更快地渲染?深入了解3D渲染性能的指南

Finovy Cloud

高性能网络 SIG 月度动态:再获认可!3 位成员成为 Linux 内核社区 reviewer

OpenAnolis小助手

Linux 内核 高性能网络 龙蜥sig smc

TE智库 |《中国通用大模型内容生成及安全性能力评测》报告发布,深度测评中国大模型玩家

TE智库

创业大赛|第二届“金靴奔跑”创新创业大赛!

科兴未来News

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