2
CAS 인증을 위해 casrack-the-authenticator gem을 사용하고 있습니다. 내 서버가 Sinatra 위에 얇게 실행됩니다. CAS 인증 비트가 작동하고 있지만 CAS 로그인을 확인하기 위해 "/index.html"요청을 가로 채기 위해 Rack에게 전달하는 방법을 모르며 사용자가 페이지를 볼 수 없으면 HTTP 403 응답을 제공합니다. 누구도이 경험이 있습니까? 감사.CAS 인증을위한 Thin, Sinatra 및 인터셉트 정적 파일 요청
내 애플 :
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
의 파일 서비스 (의견과 생각을 환영) 인증을 이해하는 랙을 받고에서
초기 시도 :
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'을 사용하지 않았습니다. 사실 Sinatra :: Base를 확장 한 클래스에 casrack을 넣었습니다. 왜냐하면 어떤 이유에서든 제 랙크에 넣을 수 없었고'enable : sessions'을 사용할 수 없었기 때문입니다 (간단한 구문이나 구성 옵션을 놓친 것 같습니다.). 기본적으로 내 랙 및 Sinatra 앱의 모습을 게시했습니다. –