我正在使用 casrack-the-authenticator gem 进行 CAS 身份验证。我的服务器在 Sinatra 之上运行 Thin。我已经让 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