Я использую драгоценный камень casrack-the-authenticator для аутентификации CAS. Мой сервер работает на Thin поверх Sinatra. Я получил бит проверки подлинности CAS, но я не уверен, как сообщить Rack перехватить запросы «/index.html» для подтверждения входа в CAS, и если пользователю не разрешено просматривать страницу, верните HTTP 403 вместо того, чтобы обслуживать фактическую страницу. У кого-нибудь есть опыт? Благодарю.Thin, Sinatra, и перехват статического запроса файла для проверки подлинности CAS
Мое приложение:
class Foo < Sinatra::Base
enable :sessions
set :public, "public"
use CasrackTheAuthenticator::Simple, :cas_server => "https://my.cas_server.com"
use CasrackTheAuthenticator::RequireCAS
get '/' do
puts "Hello World"
end
end
Мой файл rackup:
require 'foo'
use Rack::CommonLogger
use Rack::Lint
run Foo
Первоначальная попытка получения Rack понять аутентификации в файловой службе (комментарии и мысли приветствуются):
builder = Rack::Builder.new do
map '/foo/index.html' do
run Proc.new { |env|
user = Rack::Request.new(env).session[CasrackTheAuthenticator::USERNAME_PARAM]
[401, { "Content-Type" => "text/html" }, "CAS Authentication Required"] unless user
# Serve index.html because we detected user
}
end
map '/foo' do
run Foo
end
end
run builder
Спасибо за информацию, что часть кода имеет смысл. То, что я не уверен, - это эквивалент Rack для подключения к статическому серверу контента. Например, мои запросы JSON из браузера отклоняются должным образом, но статическая служба файлов, кажется, обходит мое приложение Sinatra и предоставляет index.html в любом случае. –
Вы используете 'Rack :: Static'? Если да, то это за промежуточным ПО Casrack? Возможно, вам поможет ваш файл в стойке. –
Я раньше не использовал 'Rack :: Static'. Я действительно ставил casrack в свой класс, который расширяет Sinatra :: Base, потому что по какой-то причине я не мог иметь его в своем rawn и работать с 'enable: sessions' (я, вероятно, пропустил простой синтаксис или конфигурацию, хотя). Я опубликовал в основном то, что на самом деле выглядит моим приложением для Android и Sinatra. –