【问题标题】:Storing O-Auth Tokens存储 OAuth 令牌
【发布时间】:2021-01-14 04:49:45
【问题描述】:

我对 O-Auth 完全陌生,但我刚刚实现了我的第一个 O-Auth 流程,从外部 API 获取访问令牌以收集有关使用 NodeJS 和 Express 的用户的信息。外部 API 生成访问令牌和刷新令牌,因为访问令牌仅持续 24 小时。

我想知道存储 API 访问和刷新令牌的最佳做法是什么,因为即使用户没有访问我的应用程序以在后台收集信息,我也必须使用它们。它只是一个数据库,然后在我的应用程序的服务器端查询数据库以访问 API?然后刷新令牌并从数据库中更新条目?

欢迎任何建议!

【问题讨论】:

    标签: node.js express oauth-2.0 oauth


    【解决方案1】:

    答案实际上取决于您使用的 API 客户端的类型。 OAuth 为以下 3 种场景提供标准解决方案。作为下一步,也许让我们知道哪些场景最接近您的情况:

    • Web UI:获取最终用户的令牌,然后存储在内存中,可以通过 cookie 处理访问令牌更新

    • 移动用户界面:为最终用户获取令牌,可以将它们存储在操作系统特定的安全存储中

    • 后端进程:代表自己获取令牌,然后存储在内存中,并在令牌过期时重新验证

    我的目标是将令牌存储留给授权服务器,它已内置流程以安全的方式执行此操作。

    第二个令牌存储的风险是,流氓员工可能会抢夺令牌并以用户身份进行操作 - 因此值得考虑这种威胁。

    【讨论】:

    • 我认为后端进程最能描述我的情况,用户首先必须通过前端登录才能获取访问令牌并刷新。一旦我拥有它,我将在后端刷新它,因为即使用户没有在浏览器中登录,我也会不断地使用它。当您说为此存储在“内存”中时,您是指脚本中的常规变量吗?
    • 你能不改用Client Credentials Flow吗?这往往是后端流程最简单的选择。还是您对需要包含特定用户 ID 的令牌有特殊要求?在这个流程中,您的流程只会将令牌存储在变量中。
    • 这几乎就是我目前实现它的方式,但我需要将它绑定到一个用户帐户,在我的情况下,它会与访问令牌一起作为 INSTALLED APP ID 参数返回。目前我正在测试存储在 AWS 数据库中,但不确定是否应该
    • 因此,如果您可以通过 /users/id/someresource 等 URL 代表用户调用 API,这将为您提供最简单和最标准的选项,比使最终用户令牌长期存在更可取并且必须处理令牌存储。感觉真的是一个 API 设计问题。我的目标是存储最近登录的用户 ID 而不是令牌。然后,我将能够使用客户端凭据流在后台对这些用户进行操作。当然,API 可能需要使用新操作进行更新才能启用此功能。
    • 当然,将令牌存储在应用程序数据库中并非不可能,而是一种更复杂的解决方案。大多数 UI 使用令牌生命周期,例如访问令牌 = 60 分钟,刷新令牌 = 8 小时。最终刷新令牌将过期 - 它们不会永远存在。您的后端流程需要计划会话到期,而使用客户端凭据流,这会简单得多。
    猜你喜欢
    • 2011-09-12
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2019-08-08
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多