Mongolab REST API 如何进行身份验证

Posted

技术标签:

【中文标题】Mongolab REST API 如何进行身份验证【英文标题】:How does Mongolab REST API authenticate 【发布时间】:2012-08-29 20:39:12 【问题描述】:

Mongolab 的 REST API 很酷。我可以使用 Mongolab 支持页面上提供的以下 javascript 直接在我的网站中使用它进行分析。只有当我能够理解身份验证的实际工作原理时。任何查看 html 源代码的人都可以轻松复制 URL 中提到的 API 密钥。 Mongolab 控制面板不为我的网站提供任何注册,以向我保证只有来自我的域的 api 密钥才会被验证。 这种身份验证如何工作?

$.ajax(  url: "https://api.mongolab.com/api/1/databases/my-db/collections/my-coll?apiKey=myAPIKey",
          data: JSON.stringify(  "x" : 1  ),
          type: "POST",
          contentType: "application/json"  );

【问题讨论】:

【参考方案1】:

很好的观察,很好的问题。

目前,所有 API 密钥都对与用户帐户关联的数据库具有读写权限,并且任何拥有 API 密钥的代理都可以成功发出任何此类请求。

如您所见,这个非常基本的密码在设计时并未考虑到任何细粒度的安全性。

不过,我们正在开发一批新的 REST API 安全功能,旨在实现这一目标。

如果您有兴趣讨论详细信息,请通过 support@mongolab.com 联系我们。

【讨论】:

您似乎已经为此工作了很长时间,虽然我很欣赏开发人员可以通过其他方式自己做这件事,但估计的时间尺度会很有用。 我很想听听更多关于规划方面的信息。是否有指向“一批新的 REST API 安全功能”的链接,以便我可以了解它们将如何工作并可能对我的 2cts 进行权衡? 这方面有什么更新吗?如果 API 不能在客户端使用,那么您的 jquery 示例就没有任何意义。【参考方案2】:

我想将 MongoLab 服务用于我的第一个 AngularJs 应用程序和 MongoDB,但 MongoLab 还没有准备好使用需要从前端访问 MongoDB 的 Web 应用程序进行生产。

在浏览器网络流量中获取 API 密钥非常容易(见下面的截图,那里的 apiKey 是纯文本),然后任何人都可以完全访问数据库。所以在 MongoDB 上摆弄是没有问题的。

我还没有找到 MongoLab 的解决方法。目前,我想我会使用另一个服务,比如https://www.dreamfactory.com/

我还没有详细尝试过,但是对于带有 MongoDB 的 AngularApp 来说它看起来很棒,我需要检查他们如何实现 api 的安全性。乍一看,它似乎正在使用会话令牌来保护对数据库的请求。

【讨论】:

【参考方案3】:

您有一个 API 密钥,用于使用他们的 REST API 向您的数据库发出 http 请求。例如,如果用户想要登录,我会使用如下 GET 方法发出请求:

https://api.mongolab.com/api/1/databases/name_db/collections/users/put_your_params_like_username_and_pw?apiKey=xxxxxxxxx

然后您分析对该请求的响应。它不是世界上最安全的数据库,但它正在变得越来越好。

如果您想了解更多信息,我会在我的博客中讨论:http://lolapriego.com/blog/?p=16

【讨论】:

以上是关于Mongolab REST API 如何进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

MongoLab 数据库是不是存在 ReadOnly REST API 密钥,还是始终为 ReadWrite

MongoLab 数据库是不是存在 ReadOnly REST API 密钥,还是始终为 ReadWrite

使用 Django rest 框架在两个 api 之间配置身份验证的最佳方法是啥?

用于重定向到 REST api 中的身份验证的适当 HTTP 状态

如何从 android 客户端进行经过身份验证的 django rest api 调用?

如何使用 Django-oauth-toolkit 使用 Django-rest-framework 测试 API 端点以进行身份​​验证