Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2011, 22h45   #1
Invité de passage
 
Inscription : novembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 8
Points : 0
Points : 0
Par défaut Authentification avec javascript

Bonjour à tous,

Cela fait déjà plusieurs jours que je cherche une solution a mon problème.
Est-il possible à partir d'un code javascript mis en local, remplir le champs Identifiant et Mot de passe puis "cliquer" sur Connexion du site web https://cas.univ-lyon1.fr/cas/login ?
J'ai déjà testé plusieurs code mais rien ne marche.

Merci d'avance pour votre aide
Novarmenia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 22h53   #2
Expert Confirmé Sénior
 
Avatar de Auteur
 
Inscription : avril 2004
Messages : 4 795
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 4 795
Points : 5 119
Points : 5 119
bonjour,

deux sites hébergés sur deux serveurs différents ne peuvent pas s'échanger d'informations. Que veux-tu faire précisément ?
Auteur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 23h21   #3
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
tout comme Auteur, je trouve la question plutôt floue.


tu veux avoir un script sur ta machine qui rempli les champs ?
si c'est bien ça, tu utilises une extension user-script.

et tu fais un truc du genre :

Code :
1
2
3
document.forms['login_form'].elements['username'].value = 'ton_id';
document.forms['login_form'].elements['password'].value = 'ton_pass';
document.forms['login_form'].submit();
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 23h23   #4
Invité de passage
 
Inscription : novembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 8
Points : 0
Points : 0
Tout d'abord merci pour les réponses.
On a crée une application android à partir duquel on voudrait se connecter sur le site de notre université. Vu que le site de notre université utilise la méthode CAS de jasig, on ne peut pas s’authentifier avec la méthode classique d'android. C'est pour cela que j'ai pensé utiliser javascript pour que quand l'étudiant marque son nom d'utilisateur et son mot de passe, ces deux valeur soit renvoyé dans les cases "Identifiant" et "Mot de passe" du site et ensuite on doit "cliquer" sur connections pour finaliser l'authentification.
Est-ce possible?
Novarmenia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 10h02   #5
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
j'ignore si tu peux injecteur du javascript dans une page via une app android. (probablement) et donc si tu as accès au document, il te suffit d'utiliser les 3 lignes de code que je t'ai proposé.


mais à mon avis il doit y avoir encore plus simple sans générer de page, avec une app. tu devrais être assez libre que pour envoyer une requête au serveur, récupérer le variables de session (probablement généré par ton jasig) et envoyer une seconde requête au serveur avec tes identifiants et cette variable.

je ne m'y connais pas du tout en application, je te conseillerai donc de mander de l'aide sur le forum android.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 10h51   #6
Invité de passage
 
Inscription : novembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 8
Points : 0
Points : 0
Je vais essayer de voir sur le forum android, mais en faite dans notre application on a un webview (c'est a dire c'est comme une sorte de navigateur web) à travers duquel je pensais exécuter le code de javascript.
J'ai pas très bien compris la méthode avec document "document.forms['login_form'].elements".
Est-ce que ce dernier permet de créer une sorte de bot?
Ce qu'on a c'est juste une URL, un username et un password.
Novarmenia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 11h58   #7
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Citation:
Envoyé par Novarmenia Voir le message
Je vais essayer de voir sur le forum android, mais en faite dans notre application on a un webview (c'est a dire c'est comme une sorte de navigateur web) à travers duquel je pensais exécuter le code de javascript.
J'ai pas très bien compris la méthode avec document "document.forms['login_form'].elements".
Est-ce que ce dernier permet de créer une sorte de bot?
Ce qu'on a c'est juste une URL, un username et un password.
je ne suis pas spécialiste dans ce domaine, je suis plus habitué aux sites webs, donc j'essaie tant bien que mal de t'aider avec mes faibles moyens. (peut-être qqn d'autre pourra mieux t'aider).

mais si tu peux exécuter du javascript dans la page, tu peux simplement récupérer les éléments du document et donc du formulaire et y injecter tes valeurs. une fois cela fait, déclencher la validation (submit) du formulaire.

en regardant le code source de la page https://cas.univ-lyon1.fr/cas/login , tu peux remarquer que le formulaire porte comme attribut "name" la valeur "login_form" et que le champs où tu tapes ton ID porte pour valeur de name "username".

donc on peut y accèder de la sorte :
Code :
document.forms['login_form'].elements['username']

tu peux tester ce que je dis en te rendant sur la page https://cas.univ-lyon1.fr/cas/login
à l'aide de n'importe quel navigateur et en tapant dans la barre d'adresse ceci :
Code :
javascript:document.forms['login_form'].elements['username'].value = 'ton_id';void 0;
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 12h00   #8
Membre actif
 
Inscription : juin 2004
Messages : 152
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 152
Points : 154
Points : 154
Bonjour,

Nous avons eu besoin de faire quelque chose de similaire pour gérer une connexion automatique à un serveur d'authentification CAS.

Une des solutions (je crois qu'il en existe plusieurs sur le wiki de JASIG/CAS) est d'utiliser javascript au niveau de la page de connexion de ton serveur CAS.

Je m'explique, il faut que tu fournisses les paramètres de connexion (login/password) en paramètres à la page de login de ton serveur CAS. Sur cette page, tu peux récupérer ces paramètres et utiliser un javascript qui va remplir automatiquement les champs et soumettre le formulaire.

Ex :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<%
        if (request.getParameter("username")!=null && request.getParameter("password")!=null){
%>
                <script type="text/javascript">
                        $("#username").val("<%= request.getParameter("username") %>");
                        $("#password").val("<%= request.getParameter("password") %>");
<%
        if (request.getParameter("lt")==null)
        {
%>
                        $("form")[0].submit();
<%
        }
%>
                </script>
<%
        }
%>
C'est un script jquery (bouuuuuh , juste pour remplir un champs et soumettre un formulaire, mais c'est tellement plus rapide ), mais c'est tout à fait possible d'utiliser du script sans librairie javascript.

De cette façon, si tu fournis des paramètres "username" et "password" à la page, il y a une connexion automatique, sinon, c'est l'utilisateur qui doit remplir manuellement les champs.

La ligne avec le paramètre "lt" est lié au ticket généré pour valider la session, et je crois que c'est pour éviter que ça tourne en boucle (le code a été fait il y a un moment déjà et ma mémoire commence à flancher...).

A+
BaBeuH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 12h20   #9
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Citation:
Envoyé par BaBeuH Voir le message
C'est un script jquery (bouuuuuh , juste pour remplir un champs et soumettre un formulaire, mais c'est tellement plus rapide )
heu ...

Code :
1
2
3
$("#username").val(VALEUR);
$("#password").val(VALEUR);
$("form")[0].submit();
tellement plus simple que ça :

Code :
1
2
3
document.forms['login_form'].elements['username'].value = VALEUR;
document.forms['login_form'].elements['password'].value = VALEUR;
document.forms['login_form'].submit();
perso, je n'incluerai pas une librairie pour ça.

sans parler de la forme abrégée (mais déconseillé? pour certains (très?) vieux navigateurs)

Code :
1
2
3
document.login_form.username.value = VALEUR;
document.login_form.password.value = VALEUR;
document.login_form.submit();
ou pour ne pas devoir retaper "document.login_form" 3 fois :
Code :
1
2
3
4
var f = document.login_form;
f.username.value = VALEUR;
f.password.value = VALEUR;
f.submit();
sinon au vu du site, il n'existe pas de champs avec l'ID "username" ni "password", il sagit des names.

donc pour garder la version jQuery :


Code :
1
2
3
$('input[name$="username"]').val(VALEUR);
$('input[name$="password"]').val(VALEUR);
$('form[name$="login_form"]').submit();
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 12h53   #10
Invité de passage
 
Inscription : novembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 8
Points : 0
Points : 0
Merci beaucoup Willpower et BaBeuH pour vos réponses
J'ai oublié de préciser que je suis nouveau en programmation orienté web.
Pour charger la page web j'utilise
<form name= "statsform" action= "https://cas.univ-lyon1.fr/cas/login" method= "post">
Mon code à exécuter ressemble donc à
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<html>
<head>
</head>
 
<body>
 
<form name= "statsform" action= "https://cas.univ-lyon1.fr/cas/login" method= "post">
 
<%
        if (request.getParameter("username")!=null && request.getParameter("password")!=null){
%>
                <script type="text/javascript">
                        $("#username").val("<%= request.getParameter("username") %>");
                        $("#password").val("<%= request.getParameter("password") %>");
<%
        if (request.getParameter("lt")==null)
        {
%>
                        $("form")[0].submit();
<%
        }
%>
                </script>
<%
        }
%>
</body>
</form>
</html>
et ca non plus
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
<html>
<head>
</head>
 
<body>
 
<form name= "statsform" action= "https://cas.univ-lyon1.fr/cas/login" method= "post">
 
<%
        if (request.getParameter("username")!=null && request.getParameter("password")!=null){
%>
                <script type="text/javascript">
                        $('input[name$="username"]').val(VALEUR);
$('input[name$="password"]').val(VALEUR);
$('form[name$="login_form"]').submit();
 
<%
        if (request.getParameter("lt")==null)
        {
%>
                        $("form")[0].submit();
<%
        }
%>
                </script>
<%
        }
%>
</body>
</form>
</html>
mais cela ne marche pas
Novarmenia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 13h16   #11
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
en fait, tu dois faire 2 requêtes, la première pour récupérer la valeur de "lt" (ticket de session) et la seconde pour fournir tes paramètres avec.


si BaBeuH a déjà résolu le problème pour lui, demande-lui le reste de son code.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 15h13   #12
Membre actif
 
Inscription : juin 2004
Messages : 152
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 152
Points : 154
Points : 154
Le code complet que tu as posté est-il complet ? car je ne vois pas de champs pour s'authentifier dans ton formulaire (<input type="text" />)...

Petite précision que je n'ai pas indiquée dans mon précédent post, il est préférable d'exécuter le script une fois la page chargée (et donc que les champs <input /> sont présents dans la page).

A la manière de jQuery :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
<%
    if (request.getParameter("username")!=null && request.getParameter("password")!=null){
%>
<script type="text/javascript">
    $(document).ready(function() {
        $('input[name$="username"]').val("<%= request.getParameter("username") %>");
        $('input[name$="password"]').val("<%= request.getParameter("password") %>");
<%
        if (request.getParameter("lt")==null) {
%>
            $('form[name$="login_form"]').submit();
<%
        }
%>
    });
</script>
<%
    }
%>
Sans librairie :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
<%
    if (request.getParameter("username")!=null && request.getParameter("password")!=null){
%>
<script type="text/javascript">
    window.onload = function() {
        document.forms['login_form'].elements['username'].value = "<%= request.getParameter("username") %>";
        document.forms['login_form'].elements['password'].value = "<%= request.getParameter("password") %>";
<%
        if (request.getParameter("lt")==null) {
%>
            document.forms['login_form'].submit();
<%
        }
%>
    };
</script>
<%
    }
%>
Il faut donc rajouter ce code dans la page de login et cela devrait fonctionner si tu appelles la page de login avec les paramètres dans l'url :
Code :
https://cas.univ-lyon1.fr/cas/login?username=toto&password=titi
Edit: en relisant ton code, j'ai l'impression que tu souhaites lancer la connexion depuis un autre serveur que le serveur d'authentification CAS. Je crois que ce n'est pas possible, car c'est le serveur CAS qui génère un ticket (paramètre lt) lors de la "création" de la page, et si tu ne fournis pas ce fameux ticket au serveur d'authentification, la procédure échoue... Il est impératif que tu mettes ce code directement dans la page de login sur le serveur CAS/JASIG.

A+
BaBeuH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 17h49   #13
Invité de passage
 
Inscription : novembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 8
Points : 0
Points : 0
Le truc que je ne comprends pas c'est pourquoi j'aurais besoin d'un ticket, si je veux juste avoir un fichier html (qui se trouve sur mon pc) qui rempli la case "Identifiant" et "Mot de passe". Par la suite c'est la page et le serveur qui s'occupe de tout le processus de l'authentification?
Imaginons que ce n'est pas "Identifiant" et "Mot de passe" c'est juste écrire un message et appuyer sur le bouton "Connexion", comment cela marcherai?
Novarmenia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 08h51   #14
Membre éprouvé
 
Avatar de yjuliet
 
Homme Yvan
Consultant informatique
Inscription : août 2006
Messages : 360
Détails du profil
Informations personnelles :
Nom : Homme Yvan
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : août 2006
Messages : 360
Points : 402
Points : 402
Je crois que plutôt que je chercher du côté de JavaScript pour remplir ton formulaire, tu devrais te pencher sur les API de CAS et jouer l'authentification directement depuis ton application.

http://www.jasig.org/cas/client-integration
__________________
yjuliet est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/11/2011, 14h12   #15
Invité de passage
 
Inscription : novembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 8
Points : 0
Points : 0
Merci yjuliet, j'avais déjà vu cette page mais c'est assez dur de les intégrer dans android. Mais je vais me rediriger dans cette direction.
Cependant, s'il y en a qui ont la réponse à ma question, elle seront la bienvenu ;-)
Novarmenia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 15h34   #16
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Citation:
Envoyé par Novarmenia Voir le message
Le truc que je ne comprends pas c'est pourquoi j'aurais besoin d'un ticket, si je veux juste avoir un fichier html (qui se trouve sur mon pc) qui rempli la case "Identifiant" et "Mot de passe". Par la suite c'est la page et le serveur qui s'occupe de tout le processus de l'authentification?
Imaginons que ce n'est pas "Identifiant" et "Mot de passe" c'est juste écrire un message et appuyer sur le bouton "Connexion", comment cela marcherai?
en fait, quand tu vas sur la page avec le formulaire d'authentification tu as un champs input de type hidden qui a pour valeur une clé/ticket de session que le serveur à généré pour s'assurer que tu passais bien par cette page. une fois tes champs remplis et ton formulaire envoyé, cette variable repart avec tes idenfiants et le serveur valide ta connexion.

c'est à cause de cette variable que tu ne peux pas bêtement créer un formulaire sur une autre page qui post tes données vers la bonne adresse.

si tu peux injecter du javascript sur la page en question, tu n'as qu'a ouvrir la page, remplir tes champs automatiquement à l'aide du javascript injecté et valider le formulaire automatiquement. c'est la solution qu'on te proposait, mais celle de passer par une API de CAS comme te l'a proposé yjuliet est meilleure. (je ne peux t'en dire plus car ça sort du domaine de mes connaissances).
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 20h12   #17
Invité de passage
 
Inscription : novembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 8
Points : 0
Points : 0
Ok cette fois la c'est claire
Merci Willpower
Novarmenia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h32.


 
 
 
 
Partenaires

Hébergement Web