Delegate access tokenを利用したStoreFrontApiの呼び出し

Topic summary

GraphQLでcheckoutを作成しようとし、ヘッダーに「Shopify-Storefront-Private-Token」を付けて呼び出したところ403 Forbiddenが発生。原因として、Storefront APIにAdmin用のdelegate access tokenを使っている可能性が指摘された。

主要な技術ポイント:

  • delegateAccessTokenCreateはAdmin API専用のミューテーションで、Admin用トークン(shpat…)しか発行されない。
  • Storefront APIで使うトークンは、Admin APIのstorefrontAccessTokenCreateで作成する「Storefront Access Token」。不要になった場合はstorefrontAccessTokenDeleteで削除可能。
  • checkoutCreateに必要なスコープは「unauthenticated_write_checkouts」。

結論・現状:

  • Storefront APIのcheckoutCreateにdelegate access tokenは利用不可。Storefront Access Tokenを発行し、適切なスコープとともに「Shopify-Storefront-Private-Token」ヘッダーで利用する必要がある。
  • 403はトークン種別/スコープの不一致が原因と考えられる。

補足:

  • 追加で共有されたコミュニティ投稿も、Storefrontでのdelegate token非対応を裏付ける内容。議論は実質的に解決方向で収束。
Summarized with AI on February 13. AI used: gpt-5.

checkoutの作成をgraphql apiから作成しようとしています。

レート制限を考慮して、delegate access tokenを作成して呼び出しを考えております。

delegate access tokenを呼び出すAPIのaccess tokenの作成には下記を参考に行っております。

※参考サイト

https://shopify.dev/apps/auth/oauth/getting-started#step-5-get-a-permanent-access-token

scopeには「write_checkouts」を含めております。

delegateAccessScopeにはcheckout作成となるので「write_checkouts」をスコープに指定しております。

APIコールする際にヘッダーには「Shopify-Storefront-Private-Token: トークン値」を含めております。

checkout作成APIをコールすると「403 Forbidden response」の返答が帰ってきます。

checkout作成APIにはdelegate access tokenを指定することはできなのでしょうか?

私は、CurlでポチポチAPIコールを試してみた、というレベルの確認しかしていないので、

間違った理解、誤った検証をしている可能性がありますことご留意ください。

Shopify-Storefront-Private-Token

をRequest Hederに指定されているということは、

Storefront APIのcheckoutCreateを利用しようとしている、という認識でおります。

https://shopify.dev/api/storefront/2022-07/mutations/checkoutCreate

しかし、

delegateAccessTokenCreateは、

今のところ、Admin APIにしか存在しないように見えます。

Admin API: https://shopify.dev/api/admin-graphql/2022-07/mutations/delegateAccessTokenCreate

こちらに、delegateAccessTokenCreateは確かに存在します。

Storefront API: https://shopify.dev/api/storefront

こちらには、delegateAccessTokenCreateはないように見えます。

そして、

delegateAccessTokenCreateを実際に叩いて確認したところ、

作成できるアクセストークンは、Admin API用のアクセストークン(固定のアルファベット「エス、エイチ、ピー、エイ、ティー」で始まるトークン)しか作成できないように見えました。

Admin APIからStorefront API用のトークンを作成するには、

storefrontAccessTokenCreate をするのかもしれません。

https://shopify.dev/api/admin-graphql/2022-07/mutations/storefrontAccessTokenCreate

storefrontAccessTokenCreateを、実行してみたところ、

実際にStorefront API用のトークンが作成されました。

(ただし、作成したトークンが不要になった場合は、明示的に削除する必要があるのかもしれません。 https://shopify.dev/api/admin-graphql/2022-07/mutations/storefrontAccessTokenDelete )

最後になりますが、

Storefront APIのcheckoutCreateに必要なスコープは、

unauthenticated_write_checkouts のようです。

https://shopify.dev/api/storefront/2022-07/mutations/checkoutCreate

私は、ShopifyのAPIに詳しいわけではありませんので、あくまで参考に留めていただければと思います。

(キュー田辺)

キュー田辺様

ご返信ありがとうございます。

shopifyサイトで提供されているドキュメントを確認した処、StoreFrontAPIの呼び出しに使用できないのではないかと思っておりました。

また以下の投稿内容を見つけましたので共有させていただきます。

https://community.shopify.com/topic/1641032

ご助力ありがとうございました。

1 Like