【问题标题】:Auth via REST API and securing the API itself通过 REST API 进行身份验证并保护 API 本身
【发布时间】:2017-02-04 03:37:57
【问题描述】:

我已经使用 Jersey 2.x 为我的应用程序实现了 REST API。我采用 REST 方法是因为我计划稍后添加移动应用程序。现在它只是一个网络应用程序。我正处于考虑安全性的地步。我需要处理两件事。

  1. 对用户进行身份验证和授权:现在,我正在通过 HTTPs 使用 HTTP Basic 身份验证。但是有没有更好的方法,而不是让用户通过网络发送用户名和密码。我知道它是通过 HTTPS,但我正在探索。我想到了 OAuth 1.0a。我在正确的轨道上吗?
  2. 保护 API 本身:我不希望除我的 Web 应用程序之外的任何其他客户端在白名单中。我稍后会将我的移动应用程序添加到此白名单中。我正在设想某种密钥来识别此客户?

我想上面的 #1 和 #2 都可以使用 OAuth 1.0a 完成,但就安全和授权而言,它们是两种不同的实现。两者可以共存吗?您能否为我提供有关如何入门的任何指示以及现实世界中的一些示例?

那里有很多信息,但安全性不是我的强项,我试图通过自己在自己的应用中编写代码来理解。

【问题讨论】:

标签: rest api security authentication


【解决方案1】:

我的第一个建议是让您研究 OAuth 2.0,我不会讨论它是否比 OAuth 1.0a 更好或更差,但它似乎有更广泛的采用,因此对您来说会更容易在线查找资源; OAuth2 还在 HTTPS 的肩膀上放置了许多它的安全功能,您似乎已经在使用它。

关于将 HTTP 基本身份验证与 OAuth2 进行比较,我会检查 this answer 的一些优缺点,但就大局而言:

对于基本身份验证,每个请求中始终包含完整的凭据,而对于 OAuth2,它是每个请求中包含的访问令牌。

关于使用密钥识别每个客户端应用程序,这在 OAuth2 中确实受支持,但是,如果您计划拥有(本地)移动应用程序,您将面临巨大挑战,因为这些应用程序无法真正保密(攻击者可以对您的应用程序进行逆向工程并找到秘密)。

总之,对于传统的 Web 应用程序,很容易确保您的 API 只允许访问确实在使用您的白名单应用程序的授权用户。如果您想向本地移动应用程序打开 API,您将很难证明调用确实来自您的授权应用程序之一。

关于常见 OAuth2 场景的示例,我会查看 Auth0 Architecture Scenarios。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2016-04-16
    • 1970-01-01
    • 2015-04-01
    • 2016-10-28
    • 2013-01-27
    • 2014-06-13
    相关资源
    最近更新 更多