21

基本的に私のシナリオは、アクセスするために 1 つのハードコードされたユーザー名とパスワードを必要とする内部 Web サイトを持っていることです (これはオフにすることはできず、変更することしかできません)。さまざまな理由 (ポートの非表示、URL の簡略化、NAT の簡略化など) で、この Web サイトをリバース プロキシ経由で公開しています。

ただし、私がやりたいことは、Apache を使用して認証を処理できるようにすることです。

  1. 全員に単一のパスワードを配布する必要はありません
  2. Apache の BasicAuth を使用して複数のユーザー名とパスワードを持つことができます
  3. 内部ユーザーの場合、パスワードの入力を求める必要はありません

編集: よりリッチな認証に関する 2 番目の部分は、新しい質問に移動されました

これが多かれ少なかれ私が今持っているものです:

<VirtualHost *:80>
  ServerName sub.domain.com

  ProxyPass        / http://192.168.1.253:8080/endpoint
  ProxyPassReverse / http://192.168.1.253:8080/endpoint

  # The endpoint has a mandatory password that I want to avoid requiring users to type
  # I.e. something like this would be nice (but does not work)

  # ProxyPass        / http://username:password@192.168.1.253:8080/endpoint
  # ProxyPassReverse / http://username:password@192.168.1.253:8080/endpoint

  # Also need to be able to require a password to access proxy for people outside local subnet
  # However these passwords will be controlled by Apache using BasicAuth, not the ProxyPass endpoint

  # Ideas?
</VirtualHost>
4

2 に答える 2

27

リクエストをエンドポイントに渡す前に、Authorization ヘッダーを追加または上書きします。承認ヘッダーはハードコーディングできます。これは、文字列 "username:password" の base-64 エンコーディングです (引用符なし)。

まだ行っていない場合は、mod_headers モジュールを有効にします。

RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

これを条件付きで実行するには、mod_setenvif を有効にします。たとえば、ローカル リクエストの場合は引き続きマスター パスワードを要求します。

SetEnvIf Remote_Addr "127\.0\.0\.1" localrequest
RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" env=!localrequest

# ALL remote users ALWAYS authenticate against reverse proxy's
#  /www/conf/passwords database
#
<Directory /var/web/pages/secure>
  AuthBasicProvider /www/conf/passwords
  AuthType Basic
  AuthName "Protected Area"
  Require valid-user
</Directory>

# reverse proxy authenticates against master server as:
#  Aladdin:open sesame (Base64 encoded)
#
RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
于 2009-02-20T21:14:42.630 に答える
5

あなたの例を使用して、apache proxypass を使用して 2 つの IP カメラを指定しました。構文 user:password@camarafeliz3.compufiber.com を使用して iphone からアクセスすると、safari (iphone ナビゲーター) からセキュリティ メッセージが表示されたので、iPhone 4S でうまく動作するように例を変更しました。

<Location /camarafeliz1/ >
        # usuario admin password 123456
        ProxyPass         http://192.168.0.39/
        ProxyPassReverse  http://192.168.0.39/
        RequestHeader set Authorization "Basic YWRtaW46MTIzNDU2=="
</Location>
<Location /camarafeliz3/ >
        # usuario admin password 123456
        ProxyPass         http://192.168.0.99/
        ProxyPassReverse  http://192.168.0.99/
        RequestHeader set Authorization "Basic YWRtaW46MTIzNDU2=="
</Location>

リンク内のユーザーとパスワードのために、iPhone 4sはセキュリティについて不平を言うのをやめました。

于 2012-01-17T20:57:16.537 に答える