【问题标题】:Remember Me Token in Nodejs RESTFul API在 Nodejs RESTFul API 中记住我的令牌
【发布时间】:2016-10-11 04:21:54
【问题描述】:

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

当前工作流程

  1. 使用给定 OTP 的移动应用请求身份验证
  2. 验证成功后,应用程序会给出一个令牌,该令牌是 在 cookie 中传回
  3. 对于受保护 API 的调用,应用程序调用 在上一步中传回的带有 cookie 的 API。
  4. 服务器重置cookie中的token并将响应返回给App

工作流程问题 该应用程序已成功登录并具有有效的 cookie。

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

【问题讨论】:

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


    【解决方案1】:

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

    令牌存储

    我的意思是类、文件、cookie 或对象,您可以在其中保存当前令牌,并在操作完成后使用新令牌进行更新。

    这个解决方案的问题是,如果你同时使用相同的令牌制作 (a)、(b) 和 (c),第一个完成的人会更新 store,而另外两个人会失败。您可以同步或同时运行它们。

    如果你想这样做,也许有一个更好的主意:

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

    对请求进行分组

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

    管理令牌过期

    我在一些项目中看到了这一点。您为令牌设置了软到期时间,比如说 15 分钟(甚至更短)。时间过去后,您给客户一个新的令牌,在此之前您保留相同的令牌。 (a)、(b) 和 (c) 将使用相同的令牌同时运行。当您在到期时间附近运行请求时会发生问题,具体取决于完成它们需要多长时间。

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

    原创

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

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

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

    【讨论】:

    • @s-soto 并行我的意思是在之前的请求完成之前发出了多个请求。你能解释一下令牌商店吗?我会用更好的解释更新问题
    • 我正在更新我的答案。一探究竟 ;)。希望对您有所帮助。
    猜你喜欢
    • 2018-06-14
    • 2020-12-24
    • 2014-12-26
    • 2012-06-13
    • 2011-07-15
    • 2013-06-30
    • 2012-01-06
    • 2021-08-12
    • 2019-10-19
    相关资源
    最近更新 更多