9
votes

Authentification CAS et redirection avec JQuery Ajax

J'ai une page HTML qui doit faire des demandes à un CAS-protégeé ( Service d'authentification central ) Service Web à l'aide des fonctions JQuery Ajax. J'ai le code suivant: xxx pré>

la variable code> la variable peut être sur le serveur CAS ( https://cas.mydomaine.com/ Connexion? Service = myserviceURL code>) ou directement au service (qui devrait ensuite rediriger vers CAS pour obtenir un billet de service). Firebug montre que la demande est faite et qu'elle revient comme une redirection de 302. Cependant, le $. Ajax () code> La fonction ne manipule pas la redirection. P>

J'ai écrit cette fonction pour contourner ce problème: P>

var handleRedirects = function(data, textStatus) {
    console.log(data, textStatus);
    if (data.redirect) {
       console.log("Calling a redirect: " + data.redirect);
       $.get(data.redirect, handleRedirects);
    } else {
        //function that handles the actual data processing
        gotResponse(data);
    }
};


0 commentaires

3 Réponses :


5
votes

Il y a effectivement plus de résultat que l'œil.

Après une enquête, il semble que JQuery Ajax demande de cette manière échoue s'ils ne sont pas faits au même sous-domaine. Dans cet exemple, des demandes sont apportées à cas.mydomain.com à partir d'un autre serveur. Même si c'est aussi sur mydomain.com , la demande échouera car le sous-domaine ne correspond pas . .

JQuery Ajax gère correctement. J'ai fait des tests avec des scripts sur le même sous-domaine pour vérifier cela. De plus, des cookies sont également passés comme vous l'attendez. Voir Mon article de blog pour cela Recherche.

Gardez également à l'esprit que les protocoles doivent être les mêmes. C'est-à-dire que depuis cas.mydomain.com utilise https, la page à partir de laquelle vous appelez cela doit également être sur HTTPS ou la demande échouera.


1 commentaires

Avez-vous déjà trouvé une solution à ce problème? J'ai lu votre blog post suggérant JSONP, ce que j'ai lu ailleurs. Cependant, il semble que Cors est le moyen de contourner cela, mais je ne peux toujours pas obtenir les 302 redirections pour fonctionner correctement.



1
votes

Les appels croisés ne sont pas autorisés par le navigateur. Le moyen le plus simple serait d'utiliser JSONP sur l'application mobile et d'utiliser une passerelle CAS pour retourner un ticket.


0 commentaires

1
votes

Vous pouvez faire des appels AJAX de tels domaines avec un proxy PHP. Dans l'exemple suivant, le proxy est capable d'appeler des services Web de repos qui renvoient une chaîne JSON.

wsproxy.php strong> p> xxx pre>

URL Usage strong> p>

http: // Votredomain.com/wsproxy.php?url=https://wstocall.com/ws/resource?param1=false&param2=true P> blockQuote>

jQuery $. Ajax code> A > ou $. Publier code> strong> p> P> P>

Notez que si vous n'avez pas besoin de passer le nom d'utilisateur et le mot de passe, une demande d'obtention est suffisante. P>

$.ajax({
    type : "POST",
    url : "http://" + document.domain +
        "/wsproxy.php?url=http://wsToCall.com/ws/resource?param1=false&param2=true",
    dataType : "json",
    success : handleRedirects,
    data: { username: "foo", password: "bar" }
});


1 commentaires

Un problème que vous pourriez rencontrer avec ceci est que le proxy n'utilisera pas les informations de session de l'utilisateur. Dans mon cas, j'essayais de connecter l'utilisateur dans un service CAS en envoyant une demande côté serveur au serveur CAS - Le ticket de service que j'ai récupéré aient authentifié sur le service, mais ils n'étaient pas connectés au serveur lui-même (en perdant des au profit d'avoir une configuration SSO pour commencer).