非期限トークンは、漏洩したら永久に有効になってしまう。Shopify は全 Public アプリに 60 分で失効+自動ローテーションする「Expiring Offline Access Token」への移行を義務化する。
2027 年 1 月 1 日。これ以降に非期限トークンで Admin API を叩くと認証エラーが返る。
全 Public アプリ。2026/4/1 以前に作ったものも含む。Custom/Dev Dashboard 製/Admin で作成したアプリは対象外。
既存トークンをコード経由で交換して期限付に切替。マーチャント側の再インストールは不要。
2026/4/1 以前に作られたものも含む。App Store 公開有無は問わず Public 種別が対象。
既に期限付必須。今回のアナウンスは「既存にも適用拡大する」という後追いルールづけ。
単一マーチャント向けのカスタムアプリは今回の必須化対象に含まれない。
マーチャント自身が Dev Dashboard 上で生成したアプリ。
Shopify admin から作られたアプリ。
| 項目 | 非期限(OLD) | 期限付(NEW) |
|---|---|---|
| 有効期間 | 無期限 | 60 分 |
| 更新 | なし | 自動ローテーション |
| 漏洩時の影響 | 恒久的に悪用可能 | 最大 60 分で失効、影響範囲が極小 |
| 2027/1/1 以降の Admin API | 認証エラー | 正常動作 |
| OAuth ベストプラクティス整合 | 外れている | 準拠 |
非期限トークンが漏洩すると永久に有効。これは現代の OAuth ベストプラクティスから外れている。期限付+自動更新で漏洩窓を 60 分まで縮める。
リフレッシュの挙動が常に同じになるので、トークン管理の設計が単純化される。Shopify のテンプレート/公式 API ライブラリでは既に実装済み。
どのストアの・どのスコープの非期限トークンを保持しているか DB を棚卸し。
マーチャントの再インストール不要。アプリ側のコードで「非期限→期限付」に交換する。
新しい access_token / refresh_token / expires_at を保存し、Refresh フローを稼働させる。
猶予なし。非期限トークンで Admin API を叩いた瞬間 auth エラーが返る。本番影響を起こさないために、年末年始のフリーズを跨がない時期での切替が現実的。
既存トークンをアプリ側コードで交換するだけで済む。インストール済みストアへの追加オペレーション依頼は基本不要。営業/CS への通知設計も軽い。
Shopify 公式の Library を使っていれば Refresh ハンドリングは既に内包。自前で OAuth を書いたレガシー実装ほど手数が増える。
access_token 1 カラムから、access_token / refresh_token / expires_at の 3 点セット運用へ。マイグレーション設計と既存レコードのバックフィル方針を決めること。
影響範囲は「Public アプリ」のみ。マーチャントが Admin や Dev Dashboard で作ったアプリ、Custom アプリは今回の必須化対象に含まれないので、案件のアプリ種別を最初に切り分けて影響評価を出すこと。