【问题标题】:Correct way to manage user auth over REST api?通过 REST api 管理用户身份验证的正确方法?
【发布时间】:2012-06-09 12:01:35
【问题描述】:

我做了很多研究,但我无法确定这是否是实现我需要的最佳方式。

我有一个通用的网络应用程序,我想创建一个通用的移动应用程序来配合它。为了让用户保存数据/访问用户特定数据/等,他们必须登录并且登录必须通过我的网络应用程序的 REST api 进行身份验证。

因此,该 api 具有移动应用程序的私钥和公钥。公钥告诉我请求来自哪里(移动应用程序),私钥用作“盐”来散列查询字符串,然后当请求进入时可以在 Web 服务器上重新散列并比较有效性.

要登录,用户输入他们的用户名和密码,然后按照上述方法作为查询字符串 vars 发送。在另一端检查查询的有效性,并根据数据库检查用户名+密码对。如果登录正确,则会为该用户和公钥生成随机“身份验证令牌”,并将其发送回移动应用程序以在设备上本地存储。

当下一个请求来自移动应用程序时,查询字符串变量之一是前面的“auth token”,它会根据数据库中的“auth tokens”表检查其有效性(使用应用程序的公钥)。如果有效,则执行请求。

我的问题是,我做对了吗?这是实现我需要的最佳方式吗?最后一步似乎真的不安全,因为如果请求被拦截,公钥和身份验证令牌都是可见的。显然,请求将根据查询字符串的哈希值和另一端的私钥进行检查,这将确保请求不是来自任何恶意的地方。

还有其他有用的步骤或我遗漏的东西吗?例如,我读到还应该有一个时间戳变量,应根据请求中的 5/10 分钟时间范围检查该变量。任何超过 5/10 分钟的时间戳和请求都应该被拒绝。这很重要吗?

谢谢。

【问题讨论】:

    标签: api authentication rest


    【解决方案1】:

    您所描述的基本上是2-legged OAuth 的自制版本。您基本上可以使用许多实现。每当谈到安全相关的东西时,我都会说:如果其他人已经做过,不要重新发明轮子。许多大型网站(Twitter、Facebook、GitHub、Google 等)都在使用 OAuath,他们对 OAuth 标准进行了大量研究。所以我建议使用这些。

    如果您担心您发送的消息可能会被拦截,您应该使用 HTTPS...如果您通过网络传递用户名和密码组合,这通常是一个好主意。

    【讨论】:

    • 酷,感谢您的帮助。 :) 然后我将使用标准。我还将研究使用 https。 :) 但我担心的是更多人自己打电话。
    猜你喜欢
    • 2017-03-05
    • 2012-01-20
    • 2016-04-16
    • 2018-03-12
    • 2017-10-12
    • 1970-01-01
    • 2014-04-15
    • 2016-08-10
    • 2015-08-18
    相关资源
    最近更新 更多