web-dev-qa-db-ja.com

apache2:有効なユーザーを要求し、すべてを許可する

基本認証を許可したいのですが、必須ではありません。認証されているかどうかに関係なく、すべての訪問者は、スクリプトが有効なユーザー向けの特別な機能を追加できるページ(スクリプト)にアクセスできる必要があります。したがって、最初に基本認証を試してください。それが失敗した場合は、とにかくアクセスを許可してください。スクリプトは次に何をするかを決定します。スクリプト内で認証全体を実行するのではなく、Apacheに認証を実行させ、ユーザー名(存在する場合)をスクリプトに渡すだけです。

私は実際にはWebサイトではなくSOAPサービスを作成していますが、ユーザー名/パスワードの入力を求められずにサイトのホームページにアクセスしてから、http-をトリガーするメンバー専用ページにアクセスできる状況を想像するかもしれません。認証。ホームページに再度アクセスすると、パーソナライズされたホームページになります。

私は.htaccessファイルをいじっていて、ここまで来ました:

AuthType Basic
AuthName "Beveiligde website"
AuthUserFile .htpasswd
require valid-user
Order allow,deny
Allow from All
satisfy any

これはすべてを許可しますが、残念ながら最初に認証を試みません(少なくとも私が見ることができる限りではありません)。PHPの環境変数AUTH_TYPEは、有効な資格情報が使用されている場合でも空です) 。

これらをこのように組み合わせることさえ可能ですか?許可/拒否ルールによって拒否が発生した場合にのみ、Apacheが基本認証を試行することを想像できます。とにかく基本認証を強制する方法はありますか?それとも私はこれをまったく間違った方法で行っていますか?

1
Roland684

トリッキーである必要があります:)サーバーを作成するにはask認証のために、有効なユーザーを要求する必要があります。しかし、それはLocationブロック内に入る可能性があります。したがって、その場所を通常の場所にエイリアス(またはリダイレクト)できると思います。私はこのようなものがうまくいくと思います:

<location "/try-auth-first">
require valid-user
satisfy all

alias /try-auth-first /the-real-one
#redirect /try-auth-first /the/real/one
</location>

少しいじる必要があるかもしれませんが、そのようなものはうまくいくはずです。認証が失敗した場合、スクリプトは401の結果を取得してから、実際の場所に直接再試行できます(すべてから許可するように設定する必要があります)。

2
netgenius.co.uk

注文拒否、許可はおそらく解決策です。

Order deny,allow
Deny from all

確認しません。

0
Dom