Тонкий, Sinatra и перехват статического запроса файла для выполнения аутентификации CAS - PullRequest
2 голосов
/ 23 апреля 2010

Я использую гем casrack-the-authenticator для аутентификации CAS. Мой сервер работает Thin поверх Sinatra. У меня работает бит аутентификации CAS, но я не уверен, как сказать Rack перехватывать запросы "/index.html" для подтверждения входа в CAS, и если пользователю не разрешено просматривать страницу, вернуть HTTP 403 ответ вместо того, чтобы обслуживать фактическую страницу. У кого-нибудь есть опыт с этим? Спасибо.

Мое приложение:

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

Мой файл рэпа:

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

1 Ответ

2 голосов
/ 23 апреля 2010

Casrack-the-Authenticator поместит информацию CAS в сеанс стойки. Вы можете извлечь это из другой части промежуточного программного обеспечения Rack или из своего приложения Sinatra.

Следующее относится к приложению Rails, но концепция похожа на Sinatra или промежуточное ПО Rack:

# in app/controllers/application_controller.rb:
protected

def require_sign_in!
  render :nothing => true, :status => 403 unless signed_in?
end

def signed_in?
  current_user.present?
end

def current_user
  @current_user ||= Person.find_by_username(session[CasrackTheAuthenticator::USERNAME_PARAM])
end
...