首页 > 解决方案 > 如何使用状态参数使 OAuth 流安全

问题描述

背景:前端是一个 Airtable 应用程序(基本上是一个运行在 Airtable UI 中的 iframe)。后端是一个带有 Postgres 数据库的 Node 服务器,在 Heroku 上运行。我正在使用 Firebase 进行身份验证。我正在尝试添加与 Shopify 的 OAuth 集成。

当前解决方案

我设置stateaccountId用户的,所以当 Shopify 重定向到 时redirect_uri,后端知道授权码是针对哪个用户的。这可行,但它不满足验证会话相同和防止 CSRF 攻击的要求。

潜在的解决方案

当用户发起一个请求时,将第一个请求从 Airtable 应用程序发送到后端 URL,创建一个会话(例如使用),然后使用此会话作为参数express-session将它们重定向到 Shopify 。state然后可以在重定向后使用它,方法是检查会话是否与发起请求的会话相同。

此解决方案似乎满足 OAuthstate要求。但是,当用户打开从 Airtable 应用程序到后端的初始链接时,需要包含一些内容以供后端识别它们(例如accountId,JWT)。

如果攻击者将其中一个链接与他们自己的帐户详细信息共享(例如在网络钓鱼电子邮件中),并且用户通过了 OAuth 流程,则用户会将其 Shopify 帐户链接到我的服务中的攻击者帐户。有没有办法避免这种情况?

标签: node.jssecurityauthenticationoauthshopify

解决方案


推荐阅读