InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

RESTful API认证模式

作者 Dilip Krishnan 译者 马国耀 发布于 2010年1月22日

领域
架构 & 设计,
企业架构
主题
SOA ,
REST
标签
API

所有人都觉得编写客户化认证协议是有必要的”, 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

译者 马国耀 关注企业级应用相关的开发、架构及思想的发展。尤其对Java EE、SOA、ESB和Cloud Computing等领域持有浓厚兴趣。

博客园的朋友有相关评论 发表人 Chu Kevin 发表于
Re: 博客园的朋友有相关评论 发表人 qizhi xiao 发表于
  1. 返回顶部

    博客园的朋友有相关评论

    发表人 Chu Kevin

    demonfox对这篇文章的一点看法。
    blog.joycode.com/demonfox/archive/2010/01/27/11...

  2. 返回顶部

    Re: 博客园的朋友有相关评论

    发表人 qizhi xiao

    OAuth 协议是用来确保API安全性的吧,在这方面做得怎样? 好像OAuth中并没有对安全如此严格

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。