API安全/授权

时间:2013-02-07 10:50:52

标签: api node.js oauth express oauth-2.0

我需要就如何最好地解决以下方案和实施它的最佳实践提出建议。

我们公司希望彻底检修旧的IT系统,并创建新的网站应用程序和可能的移动应用程序,以便其员工和承包商进行互动。

所以我正在考虑创建一个api,网站应用程序和移动应用程序都可以从......创建。

https://api.company.com/v1

我需要的建议与api的安全/授权有关。我目前关于如何实现这一点的想法是,员工/承包商将通过公司的网站应用程序/移动应用程序与api进行交互,然后这些应用程序与api进行通信并设置适当的访问权限

WebsiteApp.company.com - >>> api.company.com/v1
mobileapp - >>> api.company.com/v1

首先想到的是为api端的每个用户设置用户名和密码,让网站应用和移动应用都使用它。然而问题是,承包商和可能的一些员工不能完全信任,并且可以在未经公司许可的情况下将用户名和密码传递给第三方。所以我的问题是我应该考虑其他安全/授权/认证策略来克服这种情况。在一个完美的世界中,每个用户都必须授权他/她想要访问api的每个设备/ mobileapp / websiteapp ...

OAuth 2.0是否具备此功能?但不确定它是否能够支持特定的用户/设备/网站?

使用的技术思想是: -

API

带有(Express js?或Restify?)的Node.js,MongoDb

消费者应用

网站应用(Angular Js,Backbone等..)
移动应用程序(PhoneGap,Jquery Mobile等..)

非常感谢

乔纳森

2 个答案:

答案 0 :(得分:1)

您的主要担忧似乎是您无法信任您所访问的人,如果是这种情况,您可能不应该首先尝试授予他们访问权限。如果这些应用程序用于任何机密信息或知识产权,而您担心其他人会看到承包商/员工是否泄露了密码,那么您必须考虑承包商/员工只是提取信息并将其丢弃。

在这种情况下,您的用户名/密码应该足以进行身份​​验证,但是您还应该考虑对谁可以访问内容的非常严格的权限。如果您担心信息泄露,应该在需要知道的基础上显示所有信息。如果承包商不需要特定的信息,请确保没有提供给他的帐户。

您还可以考虑跟踪从中访问帐户的位置(IP)。也许当从新位置访问帐户时,雇员/承包商完成一些任务来验证帐户;这可以是输入验证码(类似于双因素身份验证),调用帮助热线以及授权位置。

答案 1 :(得分:0)

这可能有点晚了,但是我正在经历相同的过程(What is the correct flow when using oAuth with the Reso​urce Owners Password​s Credentials Grant​

我们还没有想出核心实现您想要做的事情听起来类似于我们为我们的服务所做的事情。

根据我的理解,这取决于应用程序以及它们是否受信任以及您计划如何使用API​​向前发展。如果应用程序受信任,您可能会使用基于SSL的HTTP-Basic,这是一种可行的解决方案。

对于我们来说,我们将通过API创建一套可信赖的官方应用程序(Web,Mobile等)然后打开它,所以我们决定经历oAuth2的痛苦我们将使用的应用程序 Resource Owners Passwords Credentials Grant type ,您可以在其中交换用户的用户名和密码,这是客户端将使用隐式定义的信任与您的API进行交互的内容。

当我们打开第三方消费的API时,这个模型将无法工作,我们将完成所有主要网站所做的流程,并获得用户对第三方应用程序可以对其数据执行的操作的明确许可。< / p>