VPN 内部の OAuth:どの区間が依然として TLS を必要とするか
VPN が変えるのは誰がサーバーに到達するかであり、OAuth メッセージの経路ではない。区間ごとに判断する。認可応答、トークン要求、ベアラー呼び出し。
プライベートな経路制御は誰がサーバーに到達するかを決め、OAuth の転送規則は各メッセージがどう運ばれるかを決める。ブラウザ、認可サーバー、トークンエンドポイント、リソースサーバーはすべて同じ VPN の背後にあっても、異なる区間でメッセージを交換できる。各区間には独自の転送要件があり、VPN はそのどれも緩めない。VPN の境界とプロトコルの境界は別の線である。
ネットワークが信頼できるかを問うのをやめ、どのやり取りがどの境界を越えるかを問えば、判断は容易になる。
ネットワークではなく区間で判断する
エンドポイントを個別に書き出す。認可エンドポイント、トークンエンドポイント、リダイレクト URI、リソースサーバーの URL、TLS 終端点、VPN ゲートウェイを書き出し、そのうえで、各要求をどちらの当事者が起こし、応答がどこへ行くかを記す。
ゲートウェイで終端する VPN は、そのゲートウェイまでの区間を暗号化する。要求はその背後で平文 HTTP のまま続くことがあり、先行する区間が暗号化されたからといって残りの区間が HTTPS になったわけではない。プロトコルが問題にするのはまさにこの継続部分である。最初のホップを暗号化しても二番目のホップが安全になるわけではない。
転送はサービスの身元確認も担う。ブラウザはアプリケーションの URL に対する証明書を検証するが、VPN はブラウザに代わってその検証を行わず、検証されていないエンドポイントを許容可能にもしない。証明書はクライアントが呼んでいると考えているエンドポイントを名指す。ゲートウェイへのトンネルはそのエンドポイントの名前を変えず、検証もしない。
認可応答とリダイレクト URI
OAuth の現在のセキュリティベストプラクティスは、暗号化されていない接続での認可応答の送信を禁じている。これは最初の要求だけでなく、認可コードやトークンをクライアントへ戻すリダイレクトも対象とする。
同じ指針は、指定されたネイティブクライアントのループバックの場合を除き、HTTP のリダイレクト URI を認めていない。内部ホスト名は新しい例外を作らず、VPN 内部でのみ解決される DNS 名も、スキームがそう示すなら HTTP URL のままである。登録済み URI のスキームを確認し、ホスト名だけを見てはならない。
正確な HTTPS リダイレクト URI を認可サーバーに登録し、クライアント側の証明書検証は有効のままにする。HTTPS 要件を抑え込む開発用の近道は、模倣すべき本番構成とは異なる挙動のフローを生む。
トークンエンドポイントとベアラートークン要求
トークン要求は資格情報またはアクセスと交換できるコードを運ぶ。保護されていない区間で送れば、周囲のネットワークが私的であっても、リソースサーバーが後で信頼する材料を露出させる。要求を読めるプロキシは、それが運ぶ資格情報も読める。
ベアラートークンによるリソース要求について、RFC 6750 はその仕様において TLS の実装と使用を必須としている。オフィスのサブネットを信頼できると呼ぶことは、平文のベアラー配備が必要とする一般的なプロトコル例外ではない。
両方の区間で、文書化された安全なエンドポイント URL を使う。ライブラリが HTTP のトークンエンドポイントへの呼び出しを拒否するなら、その拒否は仕様が機能しているのであり、回避すべき設定上の不具合ではない。その URL は実行時に導出せず、クライアント設定に記録する。
TLS が終わる場所と、そこに残るもの
TLS が認可されたフロントエンドで終わるなら、そのフロントエンドを名指し、そこからアプリケーションまでの経路を確認する。フロントエンドは残りの区間での転送、信頼、機密性に責任を負い、サービスのサポート対象アーキテクチャはその配置を記述すべきである。
経路の別の場所にある VPN はその責任を解決しない。ブラウザが見るアプリケーション URL がフロントエンドの提示する証明書と一致するかどうかも教えてくれない。
内部配備では、終端点とそれが提示する身元を記録する。別の名前の証明書で TLS を終端するフロントエンドは、運用者が修正せずに抑え込みがちなブラウザ警告を生む。
ネイティブのループバック例外は狭い
ループバックのリダイレクト例外は、クライアントとブラウザが同じ端末を共有する、利用者自身の端末上のコールバックに関するものだ。その配置は一端末上のコールバックに属し、通常の認可サーバーやトークンを運ぶ API を HTTP でオフィスのサブネットに提供することを許すものではない。
例外は、それが記述するクライアント種別とコールバックに限定しておく。ウェブアプリケーション、共有の内部サービス、別ホスト上のリダイレクト URI に適用すれば、変わるのは配備であって例外ではない。
各境界で実際のフローを試し、クライアント種別と比較する。機能するリダイレクトは、トークンを運んだ各区間が要求された保護を使ったかどうかを何も語らず、緑の VPN アイコンは次の要求のスキームについて何も語らない。