我正在为我的移动应用程序制作一些Restful API。
APP和webserver之间的通信必须在REST中进行。这些apis应该是私有的,只有我的应用程序才能调用它们以获得成功的结果。
困难的部分是,我的应用程序中不需要用户id和密码,所以我不知道如何在没有基本用户身份验证的情况下使用移动应用程序限制rest API。
我想的一种解决方案是嵌入某种硬编码字符串,这样当移动应用程序使用that风格的url时,它们就会通过ssl以加密格式传递该url。但我知道这看起来是个很糟糕的解决方案..
在这种情况下,请建议最好的解决方案。
发布于 2018-11-14 21:09:04
你确实可以让逆向工程师的工作变得更加困难,但不能像Nasir说的那样,通过引入数学上的困难问题并相应地转换你的硬编码字符串来让它变得无懈可击。
这个怎么样。假设在app中硬编码了一个数字A
。服务器发送两个数字B
& P
(P是一个大素数)。现在,您可以计算将由服务器使用(A^B) % P
验证的实际数量。你的应用现在用Server's Public Key
加密了(A^B)%P
的答案。服务器将使用它的私钥解密它,验证它,并将发出一个具有到期时间的令牌(可能是jwt)。然后,您的应用程序和服务器可以使用该令牌进行通信。您可以在应用程序启动时执行一次计算,并存储令牌以供将来使用。
发布于 2015-01-31 20:29:12
我建议在app中创建一个复杂的令牌,由时间戳+ appId +任何其他可以在服务器上复制的值组成,并使用这些值在每个请求的头部进行身份验证。
例如,您可以在数据库中创建一个虚拟“用户”,并在其中存储deviceToken并将其用于您的算法。
我个人保留了一个公开的API请求,它是timestamp getter,它返回300秒内要使用的服务器的时间戳。
因此,在每个请求之前,获取时间戳,并发送您创建的令牌,将其复制到服务器上,从而验证请求。
不过,平庸的黑客可以对应用程序进行反向工程,并复制您的令牌
https://stackoverflow.com/questions/28251404
复制相似问题