首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是为API服务服务的安全方式,它不会造成大量的通信开销?

什么是为API服务服务的安全方式,它不会造成大量的通信开销?
EN

Stack Overflow用户
提问于 2012-02-21 19:48:53
回答 1查看 86关注 0票数 1

几天前我进行了一次面试,雇主问我如何安全地提供API服务。他说

  1. 每个API请求都需要API键。
  2. 每个API请求将请求一个方法,该方法接受一个参数,每个服务都将通过这个方法。

他想知道客户端是否有一种安全的方式,可以在不公开API密钥的情况下向服务器端提供API请求。

我谈到了一般的公共/私人密码学,但他想要比这更简单的方法。

最后,他谈到了客户端使用通用哈希算法(md5,sha1)安全散列其密钥,并使用参数和对服务器的请求对方法进行散列,但我认为我没有很好地理解这一点。

我记得有一些库首先编码了要用md5或sha1加密的API请求的主体。但是用单向散列做这件事有什么意义呢?中间的人可能不知道API密钥,但是服务器如何知道1.API密钥,2.客户机请求了什么方法?

EN

回答 1

Stack Overflow用户

发布于 2012-02-21 19:58:11

您可以将请求与API键一起散列。然后将散列添加到请求中。

那样的话,哈希就不会越过电线了。服务器可以从他自己的API密钥副本中验证。

例如,客户端可以:

代码语言:javascript
复制
var request = "http://example.com/bla?a=1&b=2";
var hash = sha1(request + ApiKey).ToHex();
var request-with-hash = request +"&key="+hash;

服务器可以:

代码语言:javascript
复制
var receivedRequest = "http://example.com/bla?a=1&b=2&key=ABC...09"
var key=extractKey(receivedRequest); // ABC...09
var strippedRequest = stripKeyFromRequest(receivedRequest);
var hash = sha1(strippedRequest + ApiKey).ToHex();
if(hash!=key)
  Error("ApiKeyWrong")

请注意,这至少仍然存在两个问题:

  1. 重播攻击。可以通过使用更好的协议来避免这种情况,
  2. - API密钥可以简单地从客户端提取,除非它在安全的系统上运行。这是一个根本的问题,是无法避免的。不可信系统上的ApiKeys不安全。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9384133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档