IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Authentification avec javascript


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 2
    Points
    2
    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

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 141
    Points
    11 141
    Par défaut
    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 ?

  3. #3
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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();

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    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?

  5. #5
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    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.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    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.

  7. #7
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    javascript:document.forms['login_form'].elements['username'].value = 'ton_id';void 0;

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  9. #9
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $("#username").val(VALEUR);
    $("#password").val(VALEUR);
    $("form")[0].submit();
    tellement plus simple que ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('input[name$="username"]').val(VALEUR);
    $('input[name$="password"]').val(VALEUR);
    $('form[name$="login_form"]').submit();

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    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.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    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?

  14. #14
    Membre confirmé Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Points : 460
    Points
    460
    Par défaut
    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

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    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 ;-)

  16. #16
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    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).

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ok cette fois la c'est claire
    Merci Willpower

Discussions similaires

  1. Authentification avec javascript
    Par Azumir dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 22/07/2008, 16h25
  2. Réponses: 16
    Dernier message: 18/10/2006, 22h52
  3. Réponses: 2
    Dernier message: 10/05/2006, 07h50
  4. Lien ASP avec javascript
    Par RATIER dans le forum ASP
    Réponses: 3
    Dernier message: 15/07/2004, 08h54
  5. Réponses: 4
    Dernier message: 27/04/2004, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo