用我们自己的解决方案保护现有的API

时间:2018-08-09 12:37:38

标签: api security oauth-2.0

我必须设计一个与提供的API交互以交换数据和信息的移动应用程序,并且我已经阅读了有关API安全性,Oauth 2,令牌等的信息,但我仍然不清楚,以下是要点:

    第三方提供的
  • API作为黑匣子,未实现安全性, 因此您可以查询属于任何用户的数据。

  • 用户应使用我们的应用程序,并使用用户名/密码登录并仅访问其数据。 (必须非常 安全,因为如果安全性受到破坏,我们应该付出很多代价)

  • 该解决方案需要实现和自行托管,而不是来自第三方或云提供商。

API调用示例:

....base url...../{subscriber-ID}/offers

上述调用为ID为{subscriber-ID}的订户获得了合适的报价,因此显然,在没有安全性的情况下,我可以查询任何订户的报价,但我的目标是在用户/密码之间链接并仅查询数据与所需用户有关。

我读了很多东西,但是由于我不熟悉API安全性而感到困惑。 那我应该从哪里开始呢?我如何从Oauth 2中受益?只是需要一个路线图,而不是如何实施。

1 个答案:

答案 0 :(得分:0)

使用弹簧安全性的

oAuth2是满足此要求的解决方案。

oAuth2中有4种授权类型,分别用于不同的场景。

  1. 客户端凭据:消费者(应用程序)仅使用通过apikey(或clientId)和机密创建的承载令牌来调用后端。通常用于检索通用信息的匿名呼叫。

  2. 资源所有者密码凭证(ROPC):使用者(应用程序)使用使用apikey,机密,用户名和密码创建的承载令牌进行呼叫。通常在您(您的授权服务器)已经知道用户(用户数据库在您自己的系统中处理)时使用。

  3. 授权码:使用者(应用程序)使用使用授权码创建的承载令牌进行呼叫。授权代码由第三方(实际上拥有/管理已登录用户数据)提供,并且创建的授权代码链接到已登录用户。 Google和Facebook登录各种站点就是一个典型的例子。 Facebook / Google为这些网站提供授权码,然后他们将其交换为令牌。

  4. 隐式授予:密码凭证和授权码的混合。您可以从第三方授权服务器获取承载令牌,而不是授权代码。

我一直在寻找授权服务器的简单示例代码很多,但从未找到。因此,我尝试自己创建它,您可以在这里找到https://github.com/abbinv/oauth2Server。仅实现ROPC和客户端凭据。

这不是“美丽”的代码。但我认为您会掌握基础知识。