なぜプライベートクラウドのログインループは自宅ネットワークの外でのみ発生するのですか?

エヴァ・ウォンテクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

外部からのログインループは通常、リモートプロキシ経路がアプリで認識されるスキーム、ホスト名、クッキー、コールバック、またはセッション情報を変更していることを意味します。

自宅内では、ブラウザがローカルアドレスを介してプライベートクラウドサービスに直接接続する一方、リモートユーザーはパブリックDNS、TLS終端、リバースプロキシ、フォワード認証レイヤー、トンネル、またはIDプロバイダーを通じてアクセスします。認証情報は正しく受け入れられても、次のリクエストでログインページに戻されるのは、セッションCookieが保存または返されていなかったり、バックエンドがHTTPSをHTTPと誤認したり、コールバックURLが登録値と異なったり、アプリケーションが内部ホスト名に対してリダイレクトを生成しているためです。

ブラウザで正確なリダイレクトループをキャプチャする

自宅外からログインする前にブラウザのネットワークパネルを開きます。リクエストログを保存し、各ステータスコード、Locationヘッダー、Set-Cookieヘッダー、リクエストホスト名、および次のリクエストでセッションCookieが現れるかどうかを記録してください。

Keycloakのトラブルシューティングガイドでは、転送ヘッダーの欠落、Cookieのスコープ、コールバックがすべて無限ログインリダイレクトを引き起こす可能性があるため、完全なリダイレクトチェーンを観察することを推奨しています。

Cookieが発行されない場合はアプリケーションとプロキシの応答を調査してください。Cookieが発行されているが返されない場合は、そのドメイン、パス、Secure属性、SameSite属性を確認します。Cookieが返されているのにアプリがリダイレクトを続ける場合は、プロキシの信頼設定とセッションストレージを調査してください。

ローカルとパブリックのホスト名およびスキームを比較する

正確なローカルURLとパブリックURL(httpまたはhttps、ホスト名、ポート、サブパスを含む)を書き留めます。アプリケーションに設定された正規または外部のベースURLがあるかテストしてください。

リバースプロキシを使ったWordPressの解析では、バックエンドがリクエストをHTTPと認識すると、プロキシがTLSを終端し続けている間にHTTPSへ繰り返しリダイレクトが発生することが説明されています。このループはプロキシ背後での誤ったHTTPS検出によるもので、ユーザーのパスワードが原因ではありません。

リモートログイン、コールバック、Cookieには一貫して1つのパブリックホスト名を使用してください。アプリケーションが複数の信頼されたオリジンを明示的にサポートしない限り、認証フロー内でパブリックドメイン、プライベートIP、内部ホスト名、代替ポートを混在させないでください。

転送されたホストおよびプロトコルヘッダーを検証する

リバースプロキシの設定とバックエンドログでX-Forwarded-ProtoX-Forwarded-HostX-Forwarded-Port、および元のクライアントアドレスを確認します。アプリケーションが既知のプロキシのみを信頼し、ブラウザが使用したのと同じパブリックURLを再構築していることを確認してください。

qBittorrentのリバースプロキシ事例では、ログインページは読み込まれ認証情報を受け入れても、不一致のHostまたはHTTPSヘッダーにより認証済みセッションが認識されないことが指摘されています。

プロキシが正しいパブリック値を送信しているのにアプリが無視する場合は、アプリケーションのtrusted-proxyおよびexternal-URL設定を構成してください。プロキシがそれらを省略する場合は、すべてのクライアント提供ヘッダーを無変更で転送するのではなく、必要最小限のヘッダーを追加してください。

Cookieのドメイン、パス、Secure、SameSiteを調査する

ローカルで作成されたセッションCookieとパブリックドメイン経由で作成されたCookieを比較してください。内部ホスト名にスコープされたCookie、誤った親ドメイン、異なるサブパス、または非セキュアなコンテキストのCookieは、リダイレクトされたパブリックリクエストに付随しない可能性があります。

外部アクセスでは別の認証ドメインやクロスサイトコールバックが追加されることが多いため、SameSite制限やSecure要件がリモートフローに影響を与えることがありますが、直接のローカルログインは単一オリジン内に留まります。

影響を受けるプライベートクラウドドメインのCookieのみをクリアし、ループを再現して新しい属性を調査してください。アプリケーションまたはプロキシのパブリックURLとCookie設定を修正し、ブラウザ全体のCookie緩和を恒久的なサーバー側の修正として使用しないでください。

OAuth、OIDC、またはForward-AuthコールバックのIDを確認する

プライベートクラウドがIDプロバイダーやフォワード認証サービスを使用している場合、アプリが生成しプロバイダーに登録され、ブラウザが到達するコールバックURLを比較してください。スキーム、ホスト名、ポート、パス、末尾のスラッシュがすべて正確に一致する必要があります。

NGINXコミュニティの事例では、TLSがプロキシで終端されるがバックエンドがHTTPを認識するため、アプリケーションが期待される安全な外部セッションを維持できず、リモートログインループが発生しています。

コールバックエンドポイントをパブリックドメイン経由で直接テストし、正しいプロキシルートとバックエンドに到達することを確認してください。認証が成功してもコールバックがログインを再開する場合は、state、nonce、Cookieの持続性、時計同期、正確なリダイレクトURIを調査してください。

プロキシをバイパスせずに完全なリモートセッションを検証する

原因を修正したら、外部ネットワークのプライベートウィンドウから開始します。ログインし、ダッシュボードを更新し、ファイルを開き、短いセッション間隔を超えて待機し、再接続して通常のナビゲーションでセッションが維持されることを確認してください。

ZimaSpaceの制御されたリモートNASアクセスガイドは、周辺のセキュリティ境界を提供します。ループ修正はバックエンドを直接公開したり認証を無効にしたりする必要はありません。

問題は、ローカルとリモートのユーザーが意図したホスト名に到達し、プロキシがパブリックリクエストの識別を保持し、Cookieが有効であり、完全なログインとコールバックフローが繰り返し成功したときにのみ解決されます。検証後は一時的なバイパスや詳細な認証ログを削除してください。

サポートとヒント

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.