繁体   English   中英

保护将由不同客户端访问的 REST API

[英]Securing REST API that will be accessed by diffrent clients

我开发了一个 REST/JSON API。 API 公开了许多功能。 API 将由我们内部设计的应用程序(移动应用程序和 Web 应用程序)、我们的经销商设计的应用程序和企业设计的应用程序使用。 我正在考虑通过实施身份验证和授权来保护应用程序。 我已经“谷歌”了很多,但我的研究给我留下的问题多于答案。

我们的内部应用程序将由在应用程序上注册的最终用户使用。 从本质上讲,我们的应用程序只是一个客户端,接收来自最终用户的请求,将其带到 REST API 并为最终用户检索数据。 我们的内部应用程序应该能够执行 REST API 公开的所有操作。 在我们的内部应用程序上处理用户登录的最佳方式是什么? 基于 SSL 或 OAuth 的 HTTP Basic?

我们的经销商应用程序可以像拥有用户一样创建用户,但最终用户详细信息会存储在我们的数据库中。 转销商应用程序将仅充当客户端,接收用户的请求并获取用户数据。 我们的经销商应用程序应仅限于 REST API 的某些操作。 我将使用什么安全机制来实现这种授权和用户登录?

我希望我的问题很清楚。 谢谢您的帮助。

根据我在阅读本文时的理解,您的问题有两个部分:

我的 API 的最佳身份验证方法是什么?

我最近为一个 API 开发了一个身份验证系统,该系统以 OAuth 为模型,但没有每个规范。 该系统与亚马逊用于其 API 的系统基本相同。 [本文] 如果您想要一个安全的 API 身份验证模型而不必使用 OAuth,那么1非常有用。

该模型使用以下原则:

  • 身份验证数据将随每个请求传递到 API 服务器
  • 请求将包含生成时的 Unix 时间戳
  • 整个请求(包括时间戳)将生成一个 HMAC 哈希值,并与其余数据一起发送。 散列是使用只有 API 服务器和 API 客户端知道的私钥生成的。
  • API 获取数据(包括时间戳),使用该用户的私钥(由用户 ID、用户名、公共 API 密钥等标识)生成 HMAC 哈希,并将其与随请求发送的哈希进行比较。 如果此操作成功,则继续进行常规身份验证并处理请求。 注意: API 将检查时间戳并将其与自己的时间戳进行比较,以确保请求发生在有效的时间范围内,例如 30 秒、5 分钟、10 分钟等。

当然,您也可以使用 SSL/HTTPS 上的常规 HTTP 身份验证,但我发现这种方式非常好,因为您无需实现OAuth协议的各个方面即可实现高级别的安全性。

您如何进行身份验证基本上取决于您。 我更喜欢使用值得信赖的大型组织(例如亚马逊)采用的方法。 我个人不想像 Twitter、Facebook 等那样完全使用 OAuth。

我应该如何允许不同的用户访问我的 API 中的不同端点?

您的 API 服务器中应该有一个内部映射,其中包含允许或拒绝特定 API 帐户访问某些端点的记录。 在我的 API 服务器中,我决定默认情况下所有端点都为“允许”,并且我将指定哪些帐户无法访问某些端点。

您还可以设置不同的组或类型的 API 访问帐户,这些帐户可以具有这样的组权限。


我的建议是 [阅读这篇文章] 2两遍或三遍,然后再读一遍。 然后,实施其中建议的方法。

就个人而言,我认为确保尽可能多的安全性的最佳方法是将与请求有关的所有内容绝对限制在定义的一组边界内,例如,我希望端点只能由 GET HTTP 请求访问(所有其他 HTTP 方法会抛出错误),每个帐户每天最多 3 次,在向服务器请求的 30 秒时间范围内,只允许返回小范围的数据等。

限制 HTTP 方法对于降低您的 API 做不该做的事情的风险非常重要,尤其是对于 RESTful API,因为端点可用于根据请求方法做多种事情。 您甚至可以为每个 API 帐户设置权限以限制每个端点上的某些方法,例如 API 用户 xxx 可以从端点获取信息但不能 POST、PUT、PATCH 等,或者 API 用户 xxx2 可以 POST 数据但不能获取任何信息等.

[编辑] 1 和 2:www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/(没有完全删除链接,但保持 url 未链接,因为它不再有效/重定向到随机站点)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM