OAuthの同意画面に重なるBasic認証のダイアログとプリフェッチの401

English

この記事の目次

本記事の概要

個人会社で開発しているサービスの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のような外部からの接続を受けるサービスを作る人に向けた記事である。

この記事の根拠は、サービスのPR、コミット、テストと、レビューとマージの規則を書いた文書と、2026-09-30に原文を確認した外部の仕様と公式文書である。npmで公開されたNext.jsの9つのバージョンにあるadapterのソースコードと、同じ日にstaging環境へ送ったリクエストのレスポンスも、根拠に入る。