adminAPIをストア内で利用することに関するセキュリティ的な懸念/security concern regarding using adminAPI in our storepage

AI-generated summary

店舗在庫をECの商品ページで表示したい要件に対し、在庫データ取得方法とセキュリティリスクを検討。Admin API(管理者向けAPI)では取得可能だが、Storefrontから直接呼ぶ案の是非が論点。Storefront API(公開向けAPI)でもProductVariant.storeAvailabilityの活用可能性が提示された。

技術的選択肢: ProductVariant.storeAvailabilityで店舗在庫の可視化ができる可能性。ローカルピックアップ(店頭受取)を無効にしていても数量が取得できるかは未検証のため、まずテスト予定。

リスクと制約:

  • Admin APIはStorefront利用を想定しておらず、商品ページ表示ごとの呼び出しはレート制限に抵触しやすい。
  • 悪意ある大量アクセスによりコール上限を消費され、機能停止の懸念(DoS的影響)。

現時点の結論・アクション: まずStorefront APIのstoreAvailabilityを試す方向。Admin APIをフロントから直呼びする構成はレート制限回避などの設計上の配慮が必要。最終解は未確定で、テスト結果待ち。

Shopify上での在庫表示とAPIに関する質問です。

弊社ではECとともに実店舗でもビジネスを展開しており、ECサイトで商品をチェックしたうえで、実店舗で実物を確認してから購入するというお客様も多数いらっしゃいます。

その際に、ECでチェックした商品が最寄り店舗に在庫として準備されているのか確認する手段が現状無く、

実際に店舗に来店いただくか、店舗に電話で確認いただくかのいずれかしか方法がない状態です。

ついては店舗の在庫もShopify上にデータとして保持させて、それをproductsページで見ていただけるような改修を検討しています。

質問1:

上記のような要件をかなえるためにShopify上の在庫情報を取得するには、

adminAPIを利用するしかなく、在庫情報はstorefrontAPIでは取得出来ないと認識しているのですが、間違いないでしょうか。

質問2:

通常adminAPIは管理者のためのAPIと認識していますが、ECサイトのページから直接adminAPIをCallしてResponseを受け取り、その結果をサイト上に表示させるという仕組みを考えています。

当然adminAPIのトークン作成時に権限は在庫のReadのみに絞る形を想定しており、自社のポリシー的には在庫情報が誰でも読み取り可能になることは問題ないと判断しています。

それでもなお、表からadminAPIが見え、在庫情報をReadできるAPIが外からCall出来る状態になっていることについて、なにか想定すべきリスクはありますでしょうか。

adminAPIがCall出来る状態であることが第三者に見つかり、悪意を持ってCall上限まで常にCallし続けられるような攻撃をされた場合、機能しなくなるということまでは想定できているのですが。

質問1

もしかしたらご希望の用途には合わないかもしれませんが、ProductVariantのstoreAvailabilityが利用できるかもしれません。

https://shopify.dev/docs/api/storefront/2024-04/objects/ProductVariant#connection-storeavailability

質問2

Admin APIはStorefrontから使われることを想定したAPIではないので、もし商品ページの表示1回につきAdmin APIに1リクエストするのであれば、PVが多くなくても短時間にアクセスが集中しただけでレート制限に引っかかると思われます。

https://shopify.dev/docs/api/usage/rate-limits#graphql-admin-api-rate-limits

アドバイスありがとうございます!

弊社では店頭受取をInactiveにしているので、それでもなおQuantityが取得できるかどうかは要テストですが、ざっと見た感じ行けそうな感じがするので、まずはトライしてみます。

またadminAPIを利用した時の懸念点もありがとうございます。ご指摘の通り仕組みは少し考えないと、ページ読込のたびにCallしていたら上限にかかりそうです。

有意義な情報大変ありがとうございました。