如何通过查询身份验证保护 REST API

Posted

技术标签:

【中文标题】如何通过查询身份验证保护 REST API【英文标题】:how to secure rest api with query authentication 【发布时间】:2015-10-17 08:36:18 【问题描述】:

我有一个由 asp.net webservice 创建的 rest API,我有一个调用 api 并向用户显示一些数据的 androidios 应用程序。

我需要以一种只有我的应用程序才能通过 api 访问数据并且其他请求被拒绝的方式来保护我的 API。

我应该提到我的应用程序不是用户群,所以没有登录和身份验证,我不想强​​制用户登录!!!

根据我的搜索,我需要查询认证(查询参数)来实现这个。

我需要的是如何创建这种查询参数以及如何验证它们? (性能对我来说太重要了)

提前致谢

【问题讨论】:

【参考方案1】:

我不是安全专家,但据我所知,您想要什么是不可能的。攻击者可以访问您嵌入客户端以验证您的应用程序的任何内容,然后攻击者可以使用该信息访问您的 API。

【讨论】:

我也不是。我想问一下客户端应用程序是否可以在后台生成类似 OTP 的东西来与服务器应用程序通信?在这种情况下我们可以使用更多的安全硬件,例如 HSM 吗? @ChungPham 如果您要在客户端上创建一次性便笺簿,那么创建它的算法就在客户端上并且它位于客户端的内存中 - 熟练的攻击者都可以访问两者。我想您可以将 HSM 分发给客户端,但在这种情况下,这意味着将硬件邮寄给 android 用户。如果 OP 不想给最终用户密码,我怀疑他想给他们一个 HSM。 :-)【参考方案2】:

您可以使用基本身份验证或任何基于令牌的身份验证机制。 因此,在对您的 api 的每个请求中,获取身份验证标头(http 请求标头中的身份验证令牌)并验证是否允许客户端调用它。如果失败,则通过必要的 HTTP 状态代码发送。您只需要确保您希望允许调用您的 api 的应用程序在其请求标头中使用这些安全令牌。您可以根据需要将这些凭据或安全令牌保存在内存、文件或数据库中。

【讨论】:

如果凭据位于客户端上,您如何保护它们? 我猜你的 api 的消费者是移动应用程序。因此,在您的 android 应用程序或 ios 应用程序中,需要使用凭据来调用您的服务 api。因此,凭据不会暴露给应用程序的用户,而是在应用程序内部配置。 客户端应用程序内的任何凭据都容易受到攻击者的攻击。用户可能看不到它们,但专门的攻击者会。

以上是关于如何通过查询身份验证保护 REST API的主要内容,如果未能解决你的问题,请参考以下文章

保护未经身份验证的 REST API

使用 OAuth 保护我的 REST API,同时仍然允许通过第三方 OAuth 提供程序进行身份验证(使用 DotNetOpenAuth)

无需对移动应用进行用户身份验证即可保护私有 REST API 的最佳方法

需要一些有关 REST API 的 JWT 身份验证的信息

多个应用程序上的 SSO 和 REST Api 身份验证

Netsuite - REST API - 使用基于令牌的身份验证 (TBA) 进行查询 - (在 Python 中)