使用明文密码访问 REST API 的最佳实践
Posted
技术标签:
【中文标题】使用明文密码访问 REST API 的最佳实践【英文标题】:Best Practice for accessing REST API with plaintext password 【发布时间】:2015-03-12 05:42:42 【问题描述】:我正在构建的应用程序使用 AJAX 连接到 REST Web 服务。此服务不需要 API 密钥,而是需要纯文本用户名和密码作为 POST 数据与身份验证请求一起传输。除了这种糟糕的设计之外,用户/通行证组合是用于访问与服务相关联的网站的相同凭据,这使得它们特别敏感。该服务确实使用 SSL,但用户/通行证仍以纯文本形式出现在 javascript 源代码中。既然最明显的答案“不要使用具有如此明显安全漏洞的服务”对我来说不是一个选项,那么是否有任何巧妙的解决方案来保护用户名和密码?
这个应用程序经常向 API 发出请求以处理实时数据,因此我试图避免在我自己的服务器上使用代理,这基本上会使我的开销翻倍。这让我希望有某种客户端解决方案。
我将部署会限制可读性的缩小代码,但这很容易反转,它不会混淆纯文本值,所以我希望有更强大的东西。
我正在使用 jQuery,我的请求非常典型。
$.ajax(
type: "POST",
url: "https://my.insecurewebservice.com/api/",
data: JSON.stringify(
"username": "me@mymail.com",
"password": "plaintextpassword"
),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(response, status, request)
// perform the usual work here
);
【问题讨论】:
如果可能,请联系您的网络服务提供商并进行讨论。 【参考方案1】:在那种 API 模型中无法保护此类数据。在某些时候,浏览器中的 JS 需要使用这些凭据进行 AJAX 调用,并且无论您在那之前做了什么(缩小、加密等),都必须撤消它才能传输服务器的密码。那是默默无闻的安全,它根本不是安全。
您的选择是:
让提供商更改其 API 在他们的网络会话期间提示用户输入密码(听起来这不是一个选项) 通过您自己的中间 Web 服务代理这些请求听起来,代理选项是您最好的选择。这并不全是坏事,因为您也许可以在该层中进行一些缓存或其他优化。
【讨论】:
以上是关于使用明文密码访问 REST API 的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章