本記事の概要
個人会社で開発しているサービスのstaging環境で、Basic認証から除外したOAuthの同意画面に、Basic認証のダイアログが重なった。同意画面が送るアイコンとプリフェッチの2種類のリクエストは、除外リストに無いパスに届いたので、どちらにも401が返った。実装したAIエージェントは、3回目の修正で、Sec-Fetch-Modeヘッダの値で、401のレスポンスにWWW-Authenticateヘッダを含めるかを変えた。
2回目の修正では、実装したAIエージェントが、プリフェッチのリクエストに付くRSCのヘッダで判定する処理を追加した。ミドルウェアの関数を直接呼ぶテストは、34件が通った。しかし、Next.jsでリクエストをミドルウェアに渡すadapterは、渡す前にRSCのヘッダを消す。そのため、adapterを通すと、2回目の修正の判定は働かない。
2026-09-30の確認では、staging環境は、4種類のリクエストに、3回目の修正で想定したレスポンスを返した。この確認からは、外部のOAuthクライアントのモバイルアプリで同意画面にダイアログが出なくなったかまでは分からない。
記事から得られること
Basic認証でstaging環境を守りながら、OAuthのような外部からの接続を受けるサービスを作る人に向けた記事である。
- Basic認証から外したページでも、そのページが読み込むアイコンとプリフェッチのリクエストに401が返った内訳を示す。
- Sec-Fetch-Modeヘッダの値で、401のレスポンスにWWW-Authenticateヘッダを含めるかを変える修正と、その401がRFC 9110の規定に反する点を示す。
- ミドルウェアの関数を直接呼ぶテストが見逃した判定と、adapterを通すテストを比べる。
この記事の根拠は、サービスのPR、コミット、テストと、レビューとマージの規則を書いた文書と、2026-09-30に原文を確認した外部の仕様と公式文書である。npmで公開されたNext.jsの9つのバージョンにあるadapterのソースコードと、同じ日にstaging環境へ送ったリクエストのレスポンスも、根拠に入る。
ここから先は有料部分です
この記事は購読特典で、購読中の方が読めます。
有料部分はおよそ7,900字で、読み終える目安は16分です。
価格は税込みです。購入と購読は、ログインしてから進みます。購入した記事は、アカウントでいつでも読み返せます。購読中の方と購入済みの方はログインして全文を読むページへ、プランの説明はプランのページへどうぞ。
販売の対象地域は利用規約に記載しています。請求はすべて日本円で行います。