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

Spring Java Discussion :

<<j_spring_security_check>> Connexion auto par URL [Web Services]


Sujet :

Spring Java

  1. #1
    Membre à l'essai Avatar de Mak-chan
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Points : 12
    Points
    12
    Par défaut <<j_spring_security_check>> Connexion auto par URL
    Bonjour à tous,
    J'ignore si je poste au bon endroit mais j’espère que oui, sinon n'hésitez pas à me rediriger ^^'.
    J'ignore également si mon besoin est du domaine du possible mais c'est tout l'intérêt de m'en assurer ici

    Donc : pour résumer -> J'ai besoin d’accéder à un site internet don le formulaire de connexion utilise "j_spring_security_check" en "POST". ( je précise ne rien connaître au j-spring )
    Plus précisément : J'ai besoin d’accéder à ce site en ne me servant que de l'URL ! En somme : j'aimerais pouvoir entrer une URL de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://monsite/login/password
    , et me retrouver sur la page d'accueil post connexion !


    J'ai essayé toutes sortes d'astuces tordues, trouvées sur le web, en Anglais , mais sans résoudre mon problème -_-'.
    J'entends par "toutes sortes d'astuces" des choses comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://login:password@adresse-du-site/page.html
    , ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://adresse-du-site/j_spring_security_check?j_username=login&j_password=password
    ...

    C'est pourquoi je viens vers vous pour :
    1. M'assurer que mon besoin est réalisable / faisable
    2. Essayer de comprendre, s'il est faisable, comment diable procédé ?!


    Je précise que le fait que le mot de passe apparaisse en clair dans l'URL n'est pas un problème à mon niveau.
    Si possible, j'aimerais éviter de mettre les mains dans la m' ... Et modifier le code du site ciblé .. Mais si besoin est, et avec un coups de main éventuel , cela ne m'est pas non plus totalement impossible !

    Mon intérêt premier est de savoir si c'est possible, si oui comment ?! Par ce que je commence à douter de mal m'y prendre, de réinventer la roue où bien d’espérer prendre Alcatraz en 2 secondes donc bon ...
    J'aurais besoin de vos lumières ?

    Merci d'avance ~

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Si vous avez accès aux sources de la WebApp, vérifiez sa configuration :
    si elle est basée sur des fichiers XML, vous devriez en avoir un avec des tags <security:http ...> ou simplement <http ...>
    si elle est faite en Java, vous devriez trouver (au moins) une classe qui "extends WebSecurityConfigurerAdapter"

    Dans les 2 cas, vous devez commencer par vérifier qu'elle est l'URL de la page de "login":
    par défaut c'est HOST/WEPADDDOMAIN/login
    ensuite si la WebApp utilise ou pas la protection CSRF et si oui le nom du token (par défaut X-CSRF-TOKEN)
    et trouver le nom du cookie de session (par défaut JSESSIONID)

    En fait une fois que vous avez l'URL de la page de login, il suffit de s'y connecter et de dumper son contenu et les cookies qui sont définis.
    Là vous trouverez l'URL du POST à réaliser (par défaut j_spring_security_check)
    et le nom des champs user et password (par défaut "username" et "password")

    Processus de connection :
    1. faire un GET /login pour obtenir le "X-CSRF-TOKEN" si utilisé, et le cookie de session "JSESSIONID" (TOUJOURS utilisé)
    2. faire un POST sur l'URL définie dans le <form> AVEC le cookie JSESSIONID et dans le body (pas dans l'URL comme vous l'avez fait)
    username=USERNAME_VALUE
    password=PASSWORD_VALUE
    X-CSRF-TOKEN=CSR_TOKEN_VALUE
    3. récupérer la (nouvelle) valeur du cookie JSESSIONID et éventuellement du token X-CSRF-TOKEN pour les appels suivants
    (le fait que le cookie de session change ou pas après le login est un paramètre de configuration:
    regardez ce qui parle de "session fixation" dans la config XML ou la classe Java)

    Ne pas passer correctement l'éventuel token CSRF et le (toujours requis) cookie de session, vous redirigera toujours vers la page de login avec un message d'erreur.
    Donc faire un POST /j_spring_security_check sans avoir fait de GET /login avant ne marchera jamais avec la configuration par défaut des paramètres de Spring (SpringBoot ou pas),
    sauf si la WebApp a été spécialement configurée pour supporter une autre manière de s'authentifier via le filtre FORM_LOGIN_FILTER.
    (c'est possible en faisant setPostOnly(false) sur le UsernamePasswordAuthenticationFilter)

  3. #3
    Membre à l'essai Avatar de Mak-chan
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    [...]

    Processus de connection :
    1. faire un GET /login pour obtenir le "X-CSRF-TOKEN" si utilisé, et le cookie de session "JSESSIONID" (TOUJOURS utilisé)
    2. faire un POST sur l'URL définie dans le <form> AVEC le cookie JSESSIONID et dans le body (pas dans l'URL comme vous l'avez fait)
    username=USERNAME_VALUE
    password=PASSWORD_VALUE
    X-CSRF-TOKEN=CSR_TOKEN_VALUE
    3. récupérer la (nouvelle) valeur du cookie JSESSIONID et éventuellement du token X-CSRF-TOKEN pour les appels suivants
    (le fait que le cookie de session change ou pas après le login est un paramètre de configuration:
    regardez ce qui parle de "session fixation" dans la config XML ou la classe Java)

    Ne pas passer correctement l'éventuel token CSRF et le (toujours requis) cookie de session, vous redirigera toujours vers la page de login avec un message d'erreur.
    Donc faire un POST /j_spring_security_check sans avoir fait de GET /login avant ne marchera jamais avec la configuration par défaut des paramètres de Spring (SpringBoot ou pas),
    sauf si la WebApp a été spécialement configurée pour supporter une autre manière de s'authentifier via le filtre FORM_LOGIN_FILTER.
    (c'est possible en faisant setPostOnly(false) sur le UsernamePasswordAuthenticationFilter)
    Si j'ai bien compris, passer le couple login/mot de passe, comme je le souhaiterais, dans l'URL, est impossible donc.
    Mais je comprends bien mieux comment J_Spring s'y prends pour authentifier une connexion, un grand merci .

    Par contre, du coups : je me demande s'il n'est pas possible de configurer un script chargeant un GET / POST avec des p'tites variables contenant mes logs, de sorte à procéder à la connexion directe sur mon compte ?
    Parce que ça reste mon objectif, un lien/outils/script de co' automatique ... C'est du domaine du possible ? J'imagine que oui, au sein des fichiers source et ce ne serais pas propre mais comme le site ne m'appartient pas directement, je cherche plutôt une solution "distante" éxtérieure..
    Une sorte de bach ms-dos où javascript qui pourrait se charger des requêtes GET/POST pour moi mais qui serait hors fichiers source du site ciblé ...
    Possible ? Inconcevable ?

    J'ai peur que mon idée soit irréalisable car je constate que le JSESSIONID change d'une fois à l'autre sur la même session...
    Et faire un GET/POST externe n'exempterais pas de cliquer sur "connexion", qui appellerais le site avec mes p'tites variables.. Et comment lui placer le JSESSIONID ... ?
    Je dispose d'un "J_SPRING_SECURITY_REMEMBER_ME_COOKIE" mais ce dernier change lui aussi... Et j'ignore comment le placer en requête également... (Il n'y a pas de filtre CSRF)

    Lorsque je créer un mini formulaire HTML, avec les champs préremplis de mes données, qui POST sur l'URL du site/spring_security_check, cela fonctionne sans soucis.. ! (C'est déjà chouette \o/)
    Mais n'existe-t-il pas un moyen de charger une requête POST directe ?
    J'aimerais me passer de l’intermédiaire "formulaire" moche et le clique sur "connexion", ce que j'aimerais c'est un exécutable qui lance ce POST discrètement et ouvre la page.
    Mais une fois encore, j'ignore si c'est faisable où non ^^"

    En tous les cas merci beaucoup pour la réponse rapide et plutôt bien instructive =)


    [EDIT]
    J'ai trouvé une solution o/ !
    Tout simplement, j'ai un formulaire rapide qui contient mes identifiants, qui POST sur l'URL du site /spring_security_check ET .... un script qui POST plutôt qu'un bouton à cliquer.
    Ainsi, à l'appel de ma petite page HTML, cela charge la page 1 seconde puis enchaîne sur le site voulu en étant identifié <3 !
    Il ne me manque qu'une éventuelle déclaration de "remember_me" pour être parfait mais c'est plus que secondaire !
    Merci pour tout ! Je passe en résolu ♫ ~

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html>
    	<body>
    		<form action="http://site_cible/j_spring_security_check" method="POST" name="coAuto">
    			<input type="text" name="j_username" value="mon_login" style="display:none;">
    			<input type="password"  name="j_password" value="mon_password" style="display:none;">
     
    			<script type="text/javascript"> 
                               document.coAuto.submit(); //on envoie le formulaire vers site_cible avec l'authentification dans les "value", en POST 
                           </script>
    		</form>
    	</body>
    </html>
    [/EDIT]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nombre maximum de connexions acceptées par postgresql
    Par kaikai dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 26/08/2008, 10h29
  2. ligne de commandes-connexion auto de lecteurs réseau G et P
    Par mathieu_r dans le forum Développement
    Réponses: 2
    Dernier message: 24/02/2006, 17h18
  3. [Système] Connexion ssh par exec via le web
    Par naourass dans le forum Langage
    Réponses: 9
    Dernier message: 01/12/2005, 12h08
  4. connexion à Postgresql par PHP
    Par toome dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 02/09/2005, 10h49
  5. [Foxpro]Connexion ODBC par programme
    Par Richard MORRISSEY dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 07/07/2003, 21h55

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