带有 PIN 的 REST API 安全移动应用程序

信息安全 验证 移动的 休息 api
2021-09-07 04:49:51

我正在考虑编写一个将由移动设备访问的 API(我们还拥有移动应用程序,不涉及第 3 方)。

作为登录流程的一部分,我们被指示使用电子邮件/密码注册流程,然后创建一个 5 位数的 pin 号码,这将允许用户在下次打开应用程序时访问应用程序。

这似乎与大多数可用的身份验证流程(例如 oAuth)不一致,因为似乎没有迹象表明使用进一步的 pin 身份验证进行登录。

但是,似乎有很多应用程序确实可以做到这一点,所以我想知道他们是否推出了自己的解决方案?还是典型服务的组合,然后自己托管一些东西?

我正在努力确保唯一设备也与 pin 相关联,以便在 API 中正确验证请求。

欢迎指点,但是对于我看到的在移动应用程序中很常见的东西,关于这种身份验证的安全性方面似乎有很少的细节?

感谢

1个回答

我不完全理解这个问题,但似乎你想知道一个很好的解决方案来实现这个。

为了实现这一点,我建议获取一个唯一的设备 ID(可以是 IMEI,但也可以是一些依赖于操作系统的 ID),然后将其与 PIN 连接。然后使用 PBKDF2 从中派生密钥。

然后,您选择足以防止通过暴力破解 5 位密码的迭代次数,但仍然不会花费很长时间来进行身份验证。

在这里,您有 2 个选择。您可以使用生成的密钥加密 OAUTH 令牌并存储在设备存储中,也可以在服务器端实施验证,在使用移动 OAUTH 令牌时验证 PBKDF2 密钥。要检测是否使用了移动 OAUTH 令牌,您可以在登录表单中设置一个标志来检测移动登录。

如果您的管理层允许这样做,更好的解决方案是使用基于硬件的非对称密钥存储。(boolean KeyInfo.IsInsideSecureHardware();),服务器将验证安全硬件中是否存在正确的私钥(通过应用程序使用硬件密钥签名的质询)。这样就可以将应用程序严格绑定到特定设备,并且您可以跳过 PIN 身份验证,因为用户的锁屏足以防止应用程序被滥用。(然后您也可以通过禁用锁屏来给用户选择,如果他们想要没有 PIN 码)。