我已经做了很多研究,但我无法确定这是否是实现我需要的最佳方式。
我有一个通用的网络应用程序,我想创建一个通用的移动应用程序来配合它。为了让用户保存数据/访问用户特定的数据/等,他们必须登录,并且登录必须通过我的网络应用程序的 REST api 进行身份验证。
所以 api 有一个用于移动应用程序的私钥和一个公钥。公钥告诉我请求来自哪里(移动应用程序),私钥用作“盐”来散列查询字符串,然后当请求进入时可以在 Web 服务器上重新散列并比较有效性.
要登录,用户输入他们的用户名和密码,然后按照上述方法作为查询字符串 vars 发送。在另一端检查查询的有效性,并根据数据库检查用户名+密码对。如果登录正确,则为该用户和公钥生成一个随机的“身份验证令牌”,并将其发送回移动应用程序以在设备本地存储。
当下一个请求来自移动应用程序时,查询字符串变量之一是前面的“auth token”,它根据数据库中的“auth tokens”表检查其有效性(使用应用程序的公钥)。如果有效,则执行请求。
我的问题是,我做对了吗?这是实现我需要的最佳方式吗?最后一步似乎真的不安全,因为如果请求被拦截,公钥和身份验证令牌都是可见的。显然,请求将根据查询字符串的哈希值和另一端的私钥进行检查,这将确保请求不是来自任何恶意的地方。
还有其他步骤,或者我错过的有用的东西吗?例如,我读到还应该有一个时间戳变量,应根据请求中的 5/10 分钟时间范围检查该变量。任何超过 5/10 分钟的时间戳和请求都应该被拒绝。这很重要吗?
谢谢你。