记住Nodejs RESTFul API中的Me Token

时间:2016-10-10 16:26:31

标签: node.js rest passport.js remember-me

我正在为移动应用程序(Android App)开发RestFul Apis。我正在使用OTP进行两步验证并记住我的令牌。对于记住我的令牌,我目前正在使用Remember Me(任何其他类似的策略npm是受欢迎的)。 npm基本上为cookie设置了一个唯一的令牌,App可以使用它来验证自己。根据上述NPM中的文档,它建议在每次请求后重新生成令牌。 但是,如果移动应用程序发出多个并行请求,则所有并行请求都使用相同的令牌。这无疑给出了一个auth错误。我想这是常见的情况。我想知道是否有一种标准的方法来处理这个问题?

当前工作流程

  1. 使用给定OTP的移动应用程序请求身份验证
  2. 成功验证后,应用程序会给出一个令牌 传回一个cookie
  3. 对于受保护API的调用,应用程序调用 带有cookie的API在上一步中传回。
  4. 服务器重置cookie中的令牌并将响应发送回App
  5. 工作流程问题 该应用已成功登录并具有有效的Cookie。

    1. App调用受保护的API / protected_api_1
    2. 服务器已重置cookie中的令牌以进行上述呼叫,但尚未完成响应
    3. 应用程序使用旧cookie进行第二次调用/ protected_api_2,因为应用程序没有新的cookie。 Auth失败了(3)

1 个答案:

答案 0 :(得分:0)

好的,检查您的更新我想到3个解决方法。假设我们有3个动作,(a),(b)和(c)需要令牌来使用API​​。

令牌存储

这只是一个类,文件,cookie或对象,您可以在其中保存当前令牌,并且可以在操作完成后使用新令牌进行更新。

此解决方案的问题在于,如果您使用相同的令牌同时创建(a),(b)和(c),则完成的第一个将更新商店,而另外两个将失败。您可以同步或同时运行它们。

如果你想这样做,也许最好有一个:

  1. 锁定:一个布尔变量,指示正在使用令牌,当前请求必须等待令牌执行并更新令牌。
  2. 队列:只是一个链接列表,您可以在其中推送请求,并且在未设置锁定时异步使用它们。您可以在另一个处理队列的线程中实现服务,可以采用与reactor模式类似的方式。
  3. 对请求进行分组

    假设您的应用程序经常执行(a),(b)和(c)。在这种情况下,最好只在一个操作中对它们进行分组,并在服务器上只使用一个回调执行它。在您的情况下,这可能会很复杂,因为它需要创建新资源或考虑您对问题的建模。

    管理令牌过期

    我在一些项目中看到了这一点。您为令牌设置了软到期,假设为15分钟(甚至更短)。时间过后,您将为客户端提供一个新令牌,在此之前您保留相同的令牌。 (a),(b)和(c)将以相同的标记同时运行。在过期时间附近运行请求时会出现问题,具体取决于完成请求所需的时间。

    我无法向您提供有关实施的更多详细信息,因为我不知道您使用的是哪种语言或框架实现客户端,而且我从未制作过Android应用程序,但我认为这对我来说是一个好主意。尝试其中一个想法或混合它们。祝福。

    原始

    我不明白在这种情况下 parallel 是什么意思。

    尝试在您的应用中创建令牌存储资源,请求完成后,每个并行请求都会消耗并更新。

    如果所有请求都是在发送时发送的,那么将它们组合在一个操作中可能是个好主意,但这可能需要更改API端点。