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