基本的に私のシナリオは、アクセスするためにハードコードされた単一のユーザー名とパスワードを必要とする内部Webサイトがあることです(これをオフにすることはできず、変更するだけです)。さまざまな理由(ポートの非表示、URLの簡素化、NATの簡素化など)で、このWebサイトをリバースプロキシ経由で公開しています。
ただし、私がやりたいのは、Apacheを使用して認証を処理できるようにすることです。
編集:より豊富な認証に関する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:[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>
エンドポイントにリクエストを渡す前に、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=="
さて、私はあなたの例を使用して、Apacheプロキシパスを使用する2台のIPカメラを指しています。構文user:[email protected]を使用し、iphoneからアクセスすると、safari(iphone navigator)からセキュリティメッセージが表示されたので、iPhone4Sでうまく機能するように例を変更しました。
<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>
そしてiphone4sは、リンクにユーザーとパスワードが含まれているため、セキュリティについての不満をやめました。