适用于Android / iOS / Windows设备的REST身份验证

时间:2016-09-06 23:40:03

标签: rest security authentication mobile oauth

我正在创建一个REST API,它应该为客户端配备一些配额。我正在使用一个非常简单的OAuth 2机制,我使用授权服务器从客户端ID和机密中获取持有者令牌,然后我使用令牌直到它过期。

应用程序具有用户登录,用户使用用户和密码登录,并且应用程序接收特定于用户的新访问令牌,只能使用用户名和密码再次获取。

问题是,例如,客户端ID和密码将具有每分钟10个请求的配额,以便新开发人员可以将API集成到他们的服务中。所以我可以创建一个具有无限配额的特殊ID,并将其设置为代码中的常量(这是一个坏主意,反编译会导致任何人都能使用该秘密)或者我可以使用某种设备ID和秘密。

我正在考虑使用Android设备ID(在Android的情况下)识别它,但是如何防止某人创建一堆64位数并尝试注册?是否有任何服务可以验证Android设备ID?如何在其他平台上完成?

这是正确的方法吗?我应该改变机制的任何部分吗? Twitter如何做到这一点?我知道它可以完全访问API,而其他开发人员需要客户端ID和密码。

1 个答案:

答案 0 :(得分:0)

任何仅在客户端上生成的值都可能被篡改,不应被信任。甚至IP地址也可以通过简单的应用程序来欺骗。

话虽如此,您是否考虑过JWT's作为解决方案,基本上您向客户发出JWT,这些JWT包含一个唯一标识符,例如UUIDv4,用于标识客户端/用户。这将删除伪造的情况,因为您将发布凭据。

Auth0,我们有类似的要求,根据每个租户和每个用户/设备对我们的端点进行限价API调用,我们最终编写了limitd。它本质上是一个速率限制,作为一种服务解决方案,它将速率限制逻辑与应用逻辑分离。

系统的工作原理是创建多个存储桶,然后从每个存储桶中声明令牌,这样我们就实现了单独的租户,ip,基于用户的限制。