1

渡されたパラメーターに基づいて複数のコントローラークラスにアクセスするWebアプリケーションがあります。一部のコントローラーでは、ユーザーが(単純なHTTP認証によって)自分自身を認証するようにし、一部のコントローラーでは、パブリックアクセスが必要です。

これを実現する方法はありますか?私の.htaccessファイルには、

AddHandler mod_python .py
PythonHandler handler
PythonAuthenHandler handler
PythonDebug On

AuthType Basic
AuthName "My Realm"
AuthBasicAuthoritative Off
require valid-user

authenhandlerは正しく呼び出されますが、

def authenhandler(req): 
    return apache.OK

ユーザーはパスワードの入力を求められます(ただし、入力されたパスワードはすべて受け入れられます)

.htaccessからAuth*のもの(およびrequireディレクティブ)を完全に削除しようとしましたが、認証が必要な(そして見つからなかった)場合は、通常のハンドラーで次のようにしました。

request.err_headers_out.add('WWW-Authenticate', 'Basic realm="My Realm")
return apache.HTTP_UNAUTHORIZED

これは、正しい認証を受け取らなかったときにサーバーが何をすべきかを私が理解していることです。しかし、それもうまくいきませんでした。

私はPHPのバックグラウンドを持っており、後者がPHPで行われる方法であることを知っていますが、PHPは、このようなものを実際に機能させるために、文書化されていない魔法を余分に実行することがあります。これはそのようなケースの1つですか?

渡されたURLに応じて、同じハンドラーからオプションで認証を要求する方法はありますか?

4

1 に答える 1

1

Apacheで認証スコープを指定する方法はいくつかありますが、ほとんどの人が慣れているのはgt;Directorylt;です。ベース-つまり、ディレクトリ内またはディレクトリの下にあるものはすべて、htpasswdに対して認証されます。

gt; Locationlt;もあります。これは、mod_python登録コードなどのファイルシステムの外部にあるコンテンツにディレクティブを適用します。

これは、mod_statusが有効になっている場合に、/statusのような「仮想」パスに認証を設定する方法です。

mod_pythonパスでも同じことができます

<Location /python/app1/>
   Order allow,deny
   Allow from all
</Location>

<Location /python/app2/>
   Order allow,deny
   Allow from all
   AuthType             basic
   AuthName             "Protected Intranet Area"
   AuthUserFile         /etc/apache2/htpasswd
   Require              valid-user
</Location>

追加する必要があります-「一部のユーザーはユーザー名とパスワードで認証する必要があり、他のユーザーはユーザー名を入力するだけでよい」という意味かどうかは必ずしも明確ではありません

また

「一部のアプリケーションは100%の時間認証を必要とし、他のアプリケーションは100%の時間自由に利用できる必要があります」

私の最初の答えは最後のクエリを整理します。

于 2011-05-27T09:46:44.240 に答える