J'utilise la gemme casrack-the-authenticator pour l'authentification CAS. Mon serveur fonctionne sur Thina au dessus de Sinatra. J'ai réussi à faire fonctionner le bit d'authentification CAS, mais je ne suis pas sûr de savoir comment dire à Rack d'intercepter les requêtes "/index.html" pour confirmer la connexion CAS, et si l'utilisateur n'est pas autorisé à voir la page, retourner un HTTP 403 au lieu de servir la page réelle. Est-ce que quelqu'un a de l'expérience avec ça? Merci.Thin, Sinatra, et interception de la requête de fichier statique pour l'authentification CAS
Mon application:
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
Mon fichier rackup:
require 'foo'
use Rack::CommonLogger
use Rack::Lint
run Foo
Première tentative à obtenir rack de comprendre l'authentification dans son service de fichiers (commentaires et réflexions de bienvenue):
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
Merci pour l'info, ce morceau de code est logique. Ce dont je ne suis pas sûr, c'est l'équivalent Rack de l'accrochage dans le serveur de contenu statique. Mes demandes JSON du navigateur sont rejetées correctement, par exemple, mais le service de fichiers statiques semble contourner mon application Sinatra et fournir index.html de toute façon. –
Utilisez-vous 'Rack :: Static'? Si oui, est-ce derrière le middleware Casrack? Peut-être que montrer votre fichier rackup aiderait. –
Je n'utilisais pas 'Rack :: Static' avant. En fait, j'ai mis casrack dans ma classe qui étend Sinatra :: Base, parce que pour une raison quelconque, je ne pouvais pas l'avoir dans mon rack et le faire fonctionner avec 'enable: sessions' (j'ai probablement manqué une simple syntaxe ou option de configuration,). J'ai posté essentiellement ce que mon application rackup et Sinatra ressemble actuellement. –