当设计为我们的web应用程序的API,我们将使用自己的子域名为“用户名”和生成的API密钥/共享秘密。 首先,它是确定使用子域名作为用户名? 我没有看到产生的另一个重要的好处。
不同的API似乎做的两件事情:
- 使用HTTP基本身份验证与SSL
在每个请求的用户名设置为子域名和密码的API密钥。 由于我们使用SSL那么这应该是从欺骗安全。
值得注意的API: 谷歌Checkout的 , Freshbooks , GitHub上 , 的Zendesk
- 创建一个共享密钥请求签名
通过订购键/值对,并使用HMAC-SHA1与所述共享秘密生成签名通常实现。 签名然后与请求一起发送,而在另一端验证。
值得注意的API: 谷歌Checkout的 , 亚马逊AWS
PS:这就是没有错,谷歌Checkout的支持
编辑:刚才读到的OAuth 2滴签名赞成通过SSL发送的用户名/密码。
从选取哪些人的任何意见:SSL VS签名?
HTTP基本身份验证SSL是从我的研究完全安全的。
毕竟,使用SSL(现在的严格TLS)是指在传输层进行加密,我们可以放心地假设过这是安全的,并没有被篡改的任何信息。
因此通过用户名和密码,而不会产生一个签名就足够了。
伊戈尔的答案是不完全正确。 虽然TLS并确保传输层加密和安全,但它还是不如例如使用TLS与在客户端验证的数字签名的形式使用“强密码”相互验证的安全。 主要有两大原因,这是比基本身份验证TLS犹未:
密码是密码,我会承担四分之三的现在7十亿人在我们的星球使用30个字符的密码是完全随机的。 我们其余的人选择用的东西少了很多的熵。 因此,它是攻击者暴力破解使用的密码,而不是数字签名服务要容易得多。
有人可能会说,对客户端的数字签名也有涉及,对于一般访问私钥密码。 但是,这仍然是一个非常不同的情况比我们有基本身份验证:第一私钥驻留在客户端的机器,使即使是恢复对资源只会影响到一个人,而不是每个人都和第二,为典型的关键容器格式,例如PKCS#12也有基于密码的加密用于访问密钥。 这些算法是专门设计来减缓攻击到减轻他们的蛮力尝试率每单位时间,有利用于数字签名。
毫无疑问的是TLS的基本身份验证是更方便的设置和使用,但对于高度安全的环境我总是喜欢“强加密”在用户/密码的解决方案,这是值得的麻烦。
这是确定使用子域名作为用户名,只要有某种形式的一个秘密。
使用共享密钥的好处,就是“党”做请求不需要知道的秘密,只需要知道签名执行请求。 如果你希望你的用户允许请求通过浏览器来进行,如这是有益的。
使用S3您可以创建一个签名,将其发送到浏览器,从浏览器到S3做直接上传。
你也可以使用HTTP摘要,其中有来自两个好处。 您还可以轻松地测试在浏览器中的API,因为浏览器支持摘要和基本和明文密码永远不会通过网络发送。
该心脏出血漏洞问题与OpenSSL的说明单靠SSL依靠一种用于保护API的潜在隐患。 根据API的使用和意义,如果SSL传输被泄露,可能需要额外的安全应采取的措施,如浮雕的答复中提到。
在回答关于一个古老的线程因为没有人真正触及要点
SSL / TLS存在根本性的缺陷像所有的PKI因为它们依赖于已被证明越来越多的时候容易受到信任链的MiM攻击 :
证书颁发机构已经或可以被黑客攻击。 在众多的一个例子是DigiNotar情况下一个CA被攻破了几个月违反承认撤销所有证书之前。 在此期间,伊朗政府已经结下不错的完全有效的SSL证书google.com,facebook.com,twitter.com等
公司代理过滤工具,如在Zscaler是解密和对飞的未指定“安全起见”重新加密的所有流量。 见这个问题/ SO回答
最常见的SSL实现(OpenSSL的)错误被发现所有的时间(但事情应该随着时间的推移更好吗?)
因此,大玩家不喜欢只依靠SSL:
在这些情况下的HMAC令牌不给你保密 ,但不会允许任何人是刺探你打造与您的凭据 ,如果你只是通过基本的身份验证通过他们这将是微不足道的,否则请求 。
到PKI模型的替代方案是在信任的网站并不依赖于一个单一的权威验证证书的真伪,而是由广大提供的意见-知名和值得信赖的同行或-已知的,但不一定是值得信赖的同伴
这种模式是不是还在十全十美,因为它是受到臭名昭著的51%的攻击完全一样的比特币Blockchain(即分布式信任模型的例子)
我想指出,在security.stackexchange.com提到的一些事情,因为你说“HTTP基本身份验证SSL是从我的研究完全安全的。” 你可能会说点以下3和4是很少有效的REST API,但它实际上取决于它们是如何实现的。
“有使用HTTP基本认证的几个问题:
- 密码被超过在base64编码线(其可以容易地转化成明文)发送。
- 密码被重复发送,为每个请求。 (大发作窗)
- 密码是由web浏览器高速缓存,至少为窗口/过程的长度。 (可以由任何其他请求到服务器,例如CSRF被静默重复使用)。
- 该密码可以被永久地存储在浏览器中,如果用户
要求。 (同前一点,除了可能被窃取
一个共享的计算机上的另一个用户)。
其中,使用SSL只解决了第一个。 即使与,SSL只保护到Web服务器 - 任何内部路由,服务器日志记录等,将会看到明文密码。
所以,与任何其重要看全貌。 难道HTTPS保护在途密码? - 是的。
够了吗? 通常情况下,没有。 (我想说,总是没有 - 但它确实取决于你的网站是其安全性如何必须这样做。)”