この記事は デジタル創作サークル UniProject Advent Calendar 2025 および Node.js Advent Calendar 2025 10 日目の記事です。
はじめに
2025 年 9 月 29 日、npm のセキュリティポリシーが大きく変更されました。
なんと、Classic Token が利用不可になりました。
加えて Fine-grained Token の最大有効期限も「無期限 → 90 日」へと短縮されました。
その結果、つい昨日まで動いていたはずの CI が一斉に落ち始めるという非常に困る状況が起きています。
何があったのか
要点だけ並べると以下の通りです。
- 長期トークンは攻撃のリスクが高いため、有効期限を短縮
- 権限過大な Classic Token を廃止
- GitHub/GitLab からの自動 publish は OIDC 認証へ移行
- これらは 12 月 9 日より完全適用
つまり、CI/CD で自動公開していた人のトークンが突然全部使えなくなったわけです。
(この記事を読んでいる時点で、すでに Fail している人も多いと思います。)
どうすればいいのか
ローカルでの npm login は従来通りで問題ありません。
問題は GitHub Actions のような Automation Workflow です。
すべての Token ベースの認証が実質終了したため、OIDC 認証に移行する必要があります。
新しい認証方法: OIDC 認証
npm は GitHub の ID トークンを使った OIDC 認証に対応しました。
この方法の利点は以下のとおりです。
- トークン漏洩のリスクがない
- ローテーション不要
- secret にトークンを登録する必要がなくなる
- CI の保守が大幅に減る
では、具体的に何を変えれば良いのか見ていきます。
従来
jobs:
# (中略)
- name: Publish package
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
これから必要な設定
GitHub Workflow に id-token: write を付与します。
permissions:
# (中略)
id-token: write
jobs:
# (中略)
- name: Publish package
run: npm publish --access public
さらに npm 側の設定として、パッケージ設定画面の「Trusted Publisher」を登録する必要があります。
設定項目
- Publisher - GitHub or GitLab(今回は GitHub)
- Organization or user / Repository - 対象リポジトリ
-
Workflow filename -
.github/workflows以下のファイル名 - Environment name - 利用していれば指定(今回は割愛)
保存したら設定完了です。
設定後、CI を実行してみてください。
正常に成功し、npm レジストリ側には OIDC 認証を示すバッジが表示されます。
これが出ていれば、認証は正しく設定されています。
最後に
今回は npm のセキュリティ強化に伴う変更に追従した記録でした。
トークン管理はセキュリティ上の課題が多く、
有効期限、ローテーション、漏洩リスクなど、常に問題がつきまといます。
今回のように CI/CD プロバイダーの OIDC を利用する方式は非常に合理的ですが、
現時点(2025 年)では GitHub Actions と GitLab CI/CD のみの対応です。
今後、CircleCI・Azure Pipelines などにも順次対応予定とのことで期待しています。
また、この対応のきっかけとなった CLI の記事も書いているので、興味があればぜひ。
お読みいただきありがとうございました!
よければ、いいね・ストック・フォローお願いします!

