Shopify 应用访问令牌 - 如何使其更安全?

Joh*_*ree 1 shopify access-token shopify-app

当商店所有者安装我的应用程序时,我将访问令牌保存到数据库中以备后用。拥有来自商店的访问令牌是一项巨大的安全责任,因为拥有这些令牌的任何人都可以从任何域/地址修改商店,没有 IP 或域锁定。

我可以使用什么方法来使这更安全?我想离线保存令牌,然后仅在需要时上传(以防我需要对所有商店进行一些全局更新),然后再次删除它。如果商家在管理员中访问应用程序配置,我会将其保存到会话中。有没有更好的方法?

dri*_*rip 6

好问题。

我也将它们保存在数据库中,但我使用与 Shopify 应用程序密码不同的密钥对它们进行编码。这样,即使有人因为某些后门入口而可以访问数据库,他也将无法使用它们。也就是说,如果有人可以访问代码,他将能够弄清楚如何解密它,因为他可以访问密钥。

也就是说,在我显示来自服务器的任何响应之前,我确保每个请求都经过身份验证。由于我使用 NodeJS 作为后端,因此我确保没有可以从不同商店访问或修改的全局变量。一切都在单独的函数中整齐地限定了范围,以便会话限定在当前存储的范围内,并且没有其他存储会话能够弄脏另一个存储会话。

此外,我确保在客户端卸载他的应用程序时会触发一个 webhook,以便从我的数据库中清除任何重新评级他的商店的信息。

我知道有些人正在为此使用会话(在线方法),但他们提出了我不喜欢的其他问题,所以我坚持使用数据库(离线),因为这是访问应用程序而不是多次重定向的更快方法保存会话。

至于建议,我可以给你一些我在构建一些基本应用程序的过程中学到的技巧。(无论如何,我不是该主题的专家)

  • 当涉及到合理信息时,不要依赖任何 cookie
  • 验证来自前端的每个请求
  • 不要相信用户并验证来自前端的任何输入
  • 不要使您的设置过于复杂,虽然具有高安全性是件好事,但如果它使您的应用程序对用户来说变慢并且您失去了客户,则是不好的
  • 寻找其他现成的流行解决方案,可以引导您走上正确的道路
  • 不要贪婪地使用应用程序范围,只请求您的应用程序所需的范围
  • 记得在可能的情况下自己清理,但不要过度清理(太多的应用程序修改了客户的代码并破坏它只是为了防止以后以任何方式清理它)示例使用 ScriptTag API 而不是使用液体片段资产 API。如果您必须使用资产 API,请仅添加您知道不会破坏站点的部分。var如果站点支持 IE11,则创建变量是可以的,如果站点支持 IE11,则创建变量使用constlet不正常,或者使用 vanilla JS 是可以的,但是在jQuery不知道站点是否全局安装了变量的情况下使用是不行的。

可以在此处查看有关此问题的更多见解:

https://help.shopify.com/en/api/getting-started/authentication/oauth/api-access-modes https://community.shopify.com/c/Shopify-APIs-SDKs/Best-way-to -store-shops-that-have-installed-my-app-and-their/mp/402972