2016-12-14 35 views
1

我的Android应用程序使一些REST调用到我的后端。我希望只有我的应用程序有权调用端点。Android和SafetyNet,以确保对API的调用仅来自我的应用程序

我打算使用Google的SafetyNet归档。

1) My app ask my server fora random nonce 
2) My app ask for an .attest() 
3) My app receive the JWT 
4) My app call one of my endpoint by providing the JWT 
5) My server calls Google server to verify the JWT is correct 
6) If yes, the call is processed, rejected otherwise.. 

我的问题是:是否有.attest()的速率限制? 我的应用程序将每2秒或3秒秒发出几个POST请求

上述逻辑是否按照这种规模工作?有没有其他方法可以确保发布到我的端点的数据来自我的应用程序,并且只有我的应用程序?

回答

3

是的,如果您频繁地调用attest(),则会受到限制。除了限制速率之外,您不希望每隔几秒钟就调用一次,因为您可能开始注意到性能受到不利影响(API调用的计算成本很高,而且速度不快)。

您描述的逻辑很好,但我建议您仔细考虑需要保护的特定端点操作。通常情况下,使用SafetyNet认证以及特定的高价值行为(例如登录或付款交易)是适当的。为您提供的每个POST请求都这样做可能没有多少好处。

根据您的使用情况,在documentation使得如何在API结果应使用一个额外的建议:

理想情况下,你应该使用的安全网认证API作为一个额外的纵深防御信号反滥用系统的一部分,而不是您应用的唯一反滥用信号。

+0

这是我认为是的。我的使用案例中的'问题',即我的API只有1个端点(post)和我的所有用户发布的数据将在共同映射上共享。因此,如果没有safetyNet之类的东西,对于某人开始发布虚假数据来说,这是非常容易的。猜猜我的另一种方法是不要每秒钟都调用POST端点,但每隔几分钟左右就会调用一次,而我只是将数据汇总并批量发送。 – Johny19

+0

@ Johny19在您的应用开始发布地图数据之前是否需要登录步骤?即使不是这样,您也许可以发出令牌来响应初始的“开始”请求(第一次打开该应用程序,该应用程序受SafetyNet证明保护),您可以在内存中保存该请求并将其包含在随后的数据帖子中。 我会告诫你,SafetyNet Attestation本身并不是一个神奇的反滥用API,所以这本身可能无法解决你所设想的所有问题。 –

相关问题