代表的な面接トピック

バックエンド面接:HTTP 511 Network Authentication Required とはどういう意味か?

バックエンド普通
Offer.cc 編集チーム公開日 更新日

質問

HTTP 511 Network Authentication Required が発生するタイミング、誰がそれを生成すべきか、クライアントがどのように処理すべきか、そして 401 や 407 との違いを説明してください。

プロンプトと適用可能な文脈

HTTP 511 は、クライアントがネットワークアクセスを取得する前に認証を行う必要があることを意味します。通常、これはターゲットオリジンからではなく、インターセプトプロキシまたはキャプティブポータルから返されます。バックエンドエンジニアは、入口ネットワークの問題をアプリケーション認証の失敗と誤認するのではなく、リクエストがオリジンに到達したかどうかを立証できなければなりません。

面接官が評価するポイント

  • インターセプトプロキシが 511 を生成することを説明できるか。
  • ネットワーク認証、オリジン認証、プロキシ認証を区別できるか。
  • 511 レスポンスをキャッシュしてはならず、ログイン UI をオリジンページに見せかけてはならないことを理解しているか。
  • リダイレクトに盲目的に従うのではなく、非ブラウザクライアントに対する安全な処理を設計できるか。
  • プロキシ、DNS、TLS、およびリクエストログを用いて障害箇所を証明できるか。

回答前に確認すべき明確化のための質問

  • 呼び出し元はブラウザ、モバイルアプリ、ヘッドレスサービスクライアントのどれですか?ポータルを処理する能力が異なります。
  • 511 は企業プロキシ、公衆 Wi-Fi ポータル、アプリケーションゲートウェイのどこから返されていますか?送信者が境界を定義します。
  • リクエストは HTTP ですか、HTTPS ですか?インターセプトされた TLS は、まず証明書エラーで失敗する可能性があります。
  • クライアントはログインリソースを開いてネットワークセッションを保持できますか?できない場合、ユーザーにネットワークの変更を促すことしかできません。
  • 間欠的なプロキシ障害を診断しているのか、それともキャプティブポータルを統合しているのか?統合にはセッションプロトコルも必要です。

30秒の回答フレームワーク

「511 はネットワークエントリ認証であり、オリジンユーザーログインではありません。RFC 6585 では、インターセプトプロキシがこれを生成し、ログインリソースへのリンクを提供し、レスポンスのキャッシュを回避することを推奨しています。私は最終レスポンス IP、プロキシマーカー、TLS 状態を記録してオリジンがリクエストを受信したかを検証します。ブラウザはユーザーをポータルへ誘導できますが、サービスクライアントは 511 を 401 として扱ったり、未知の仲介者にビジネス認証情報を送信したりしてはなりません。その上で、401 オリジン認証と 407 プロキシ認証を区別し、ネットワーク、プロキシ、またはクライアント側の修正を選択します。」

ステップごとの詳細解説

ステップ 1: レスポンスの生成元を特定する。 ターゲット DNS アドレス、TCP ピア、Via またはプロキシヘッダー、オリジンのアクセスログ、ゲートウェイトレースを比較します。オリジンに一致するリクエストがない場合、仲介者が 511 を生成した可能性が高いです。

ステップ 2: プロトコルセマンティクスを解釈する。 511 はクライアントに対し、ネットワークがまだ開いていないことを伝えます。表現には認証情報や規約へのリンクが含まれる場合がありますが、ポータルフォームを本来リクエストされたオリジンのコンテンツとして提示してはなりません。

ステップ 3: 類似コードを区別する。 401 はオリジンがリソース認証を求めているもので、一般に WWW-Authenticate を使用します。407 はフォワードプロキシがプロキシ認証情報を求めているもので、Proxy-Authenticate を使用します。511 はネットワーク自体へのアクセスに関するものです。

ステップ 4: クライアントの動作を定義する。 ブラウザはネットワークログインプロンプトを表示できます。API クライアントは明確なネットワーク利用不可状態を報告し、ポータル URL を記録して、ユーザーまたはネットワーク管理者を待つ必要があります。未知の仲介者に対してビジネス認証情報をサイレントに送信してはなりません。

ステップ 5: HTTPS とキャッシュを処理する。 HTTPS のインターセプトは証明書の不一致を引き起こす可能性があります。証明書検証の無効化は解決策ではありません。511 レスポンスはキャッシュしてはなりません。キャッシュすると、一時的なネットワークゲートがすでに認証済みのクライアントに漏洩する可能性があります。

ステップ 6: 診断の証拠を構築する。 同じネットワーク上で HTTP プローブとビジネスリクエストを比較し、時刻、プロキシ、DNS、証明書チェーン、ステータス、オリジンログを記録します。Microsoft Learn でもプロキシ接続チェックにおける考えられる結果として 511 を挙げています。

ステップ 7: 代替手段と境界を述べる。 エンタープライズ API は、ビジネス API 内部で 511 ログインを実装するのではなく、プロキシの許可リスト、サービスアカウントのエグレス、またはネットワーク認証を修正すべきです。パブリックネットワークには、ユーザーが完了できるポータルフローとタイムアウトメッセージが必要です。

模範回答

「私はまず 511 をネットワークエントリレスポンスとして分類します。これはインターセプトプロキシがクライアントにネットワーク認証が必要であると伝えている状態であり、通常オリジンはリクエストを見ていません。これは 401 リソース認証や 407 プロキシ認証情報認証とは異なります。私は DNS、TCP ピア、プロキシヘッダー、TLS 証明書、オリジンログ、トレースを比較して生成元を特定します。ブラウザはポータルリンクを開くことができますが、ヘッドレス API クライアントは 401 として再試行したり、未知のプロキシにビジネス認証情報を送信したりしてはなりません。レスポンスはキャッシュしてはならず、HTTPS インターセプトによる証明書エラーを検証スキップで解決してはなりません。」

よくある間違い

  • 511 を 401 として扱う → オリジントークンをリフレッシュしてもリクエストをネットワーク外へ出すことはできません → まずレスポンスの生成元を特定してください。
  • 511 を 407 として扱う → ポータルセッションを無視してプロキシ認証情報を設定してしまう → ネットワークエントリとフォワードプロキシ認証を分離してください。
  • 未知のログインリンクに自動で従う → フィッシングポータルに認証情報が漏洩する可能性があります → 出所を表示し、ユーザーに確認させてください。
  • 511 をキャッシュする → 認証済みクライアントが古いゲートを見続けることになります → キャッシュを禁止し、仲介者を調査してください。
  • TLS 検証を無効化する → 中間者攻撃(man-in-the-middle)のリスクが高まります → ネットワーク認証または信頼設定を修復してください。

フォローアップの質問と回答

フォローアップ 1: オリジンにリクエストが届いていないのに、クライアントが 511 を受信します。次は何をしますか?

接続ピア、プロキシチェーン、レスポンスヘッダーを取得し、同じネットワーク上で既知の HTTP プローブにクエリを実行します。複数の宛先で同じレスポンスが返る場合は、エグレスプロキシまたはキャプティブポータルを調査します。

フォローアップ 2: ポータルの HTML を API JSON として返してはいけないのはなぜですか?

非ブラウザクライアントが HTML をビジネスレスポンスとしてパースして失敗する可能性があり、さらに悪いことにはポータルのコンテンツをオリジンのコンテンツと誤認する可能性があります。明示的なエラクラスと検証可能なログインエントリポイントを使用してください。

フォローアップ 3: HTTPS リクエストで 511 ではなく証明書エラーが頻繁に表示されるのはなぜですか?

仲介者がオリジンの TLS 証明書を安全に置き換えることができない場合、HTTP ステータスが存在する前にハンドシェイクが失敗します。クライアントは、すべてのネットワークゲートが 511 として表現できると想定することはできません。

フォローアップ 4: 511 を受信した後、クライアントは再試行できますか?

ネットワーク認証とセッションの確立が確認された後にのみ、元のリクエストを再試行してください。盲目的な再試行はトラフィックを増大させ、ビジネスの書き込み操作を自動的にリプレイしてはなりません。

フォローアップ 5: プロキシの誤検知と本物のポータルをどのように区別しますか?

ネットワーク、ドメイン、プロキシ設定、オリジンログ、ポータルセッションを比較します。単一のエンタープライズエグレスパスのみが 511 を返す場合は、まずそのポリシーと許可リストを調査します。

フォローアップ 6: モバイルアプリにブラウザログイン UI がない場合はどうすればよいですか?

読み取り可能なネットワーク利用不可状態を返し、ユーザーをシステムのネットワークログインページまたは別のネットワークへ誘導します。認証後に再接続し、埋め込みページ内で未知のネットワーク認証情報をサイレントに送信しないでください。

フォローアップ 7: なぜ 511 をキャッシュしてはならないのですか?

ネットワーク認証は一時的であり、クライアント固有のものです。キャッシュを行うと、別のクライアントに同じゲートが表示されたり、すでに認証されたユーザーがブロックされたままになったりする可能性があります。

公開情報ソース

関連する質問