16

基本的に私のシナリオでは、アクセスするためにハードコードされた単一のユーザー名とパスワードが必要な内部Webサイトがあります。オフにされ、変更のみ)。私はさまざまな理由(ポートの隠蔽、URLの単純化、NATの単純化など)のために、このWebサイトをリバースプロキシを通して公開しています。Apache2リバースプロキシは、BasicAuthが必要ですが、ユーザーからこれを隠す必要があります

しかし、私がやりたいものをというように、認証を処理するようにApacheを使用することができます:

  1. 私が持っていないすべての人へ 単一 パスワードを与えること
  2. 私は内部ユーザーの場合は、ApacheのにBasicAuth
  3. を使用して、複数のユーザ名とパスワードを持つことができ、私は
パスワードを要求する必要はありません

EDIT:豊かな認証についての第二の部分は、ここでnew question

に移動されたのです多かれ少なかれ私が今持っているもの:

<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:[email protected]:8080/endpoint 
    # ProxyPassReverse/http://username:[email protected]: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> 

答えて

20

が追加に上のすべての要求を渡す前にAuthorizationヘッダーを上書き終点。認証ヘッダーはハードコーディングできます。文字列 "username:password"のベース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==" 
+0

これは有望ですが、ローカル以外のリクエストの場合はMASTERパスワードを求めたくありません。私は基本的なAuth passwdリストを維持し、エンドポイントがいくつかの異なるパスワード見たことがない。これはアフリカの権利をしませんか? –

+0

最初の(無条件、つまりSetEnvIfと 'localrequest'なしの)バリアント、つまり 'RequestHeader set Authorization' Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ == "'を使用してください。リバースプロキシは常にマスターパスワードで認証され、ユーザーは常に他のパスワードを使用してRPに接続します。 – vladr

+0

私はSetEnvIfを使ってオリジナルの提案を試み、BasicAuthを動作させようとしましたが、いずれの方法も成功しませんでした。私は正常にプロキシを介してパスワードを無効にすることができますが、条件の種類に基づいて要求の種類に基づいています。 –

3

私はあなたの例を使って、apache proxypassを使って2台のIPカメラを指していました。私は構文ユーザ使用される場合:[email protected]およびiPhoneを介してアクセスIはサファリ(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はリンクのユーザーとパスワードのためにセキュリティについて不平を言った。

関連する問題