ここで問題となるのは、Sinatra(Rack)アプリを複数のサブインスタンスに展開し、異なるサブURIでHTTP基本認証を使用して不要なアクセスを守ることです。HTTP Basic認証を使用して複数のRack/SinatraアプリケーションをPassenger(Apache上)に展開する方法は?
Sinatraアプリ自分のドメインのように:
example.com/private/foo
example.com/private/moo
...
...
これらのすべてへのアクセスは、Rack::Auth::Basic
ミドルウェアを使用したHTTP基本認証によって保護されています。
# ...
users = {'user' => 'password'}
use Rack::Auth::Basic, 'realm' do |username, password|
users.key?(username) && users[username] == password
end
run MyApp
別のconfig.ru
からの変更は「王国」パラメータである唯一の事:それらのすべてのためのconfig.ru
は次のようになり。
ここで問題があるのは、アプリの1つにログインした後、private/foo
と言うと、Chromeは他のアプリのユーザー名とパスワードの入力を求めません(private/moo
など)。すべてのインスタンスがURLによって一意に識別されるため、これは直観的ではありません。インスタンスごとに異なる資格情報を使用すると動作しますが、Chromeが各インスタンスに対して少なくとも1回は資格情報を要求してはいけませんか?私が気づいたことの1つは、インスタンスの1つに初めてログインすると、「example.com:80のサーバーにはユーザー名とパスワードが必要です」というメッセージが表示されます。私は 'example.com/private/fooリソースにはユーザー名とパスワードが必要です'と予想していました。どのように動作するはずですか?
私はHTTP Basic AuthにRack::Auth::Basic
ソースコードとWikipediaの記事をチェックして、私の場合を助けるために何を思い付いた:(。
それは、ユーザ名とパスワードを要求しませんが、* *それは何をするのでしょうか? –
ユーザ名とパスワードを要求せずにログインし、別のアプリで使用した認証情報を再利用します。 – yeban
URNはそれとは関係がありません。ホスト名とレルムだけが問題です。領域が異なる場合、これは機能するはずです。 –