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

Tomcat et TomEE Java Discussion :

[Tomcat]échange de session entre php et java


Sujet :

Tomcat et TomEE Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 7
    Points : 7
    Points
    7
    Par défaut [Tomcat]échange de session entre php et java
    Salut,
    j'ai la problématique suivante : une appli web php utilise des briques java tournant sous Tomcat (en fait des servlets).
    Le lien entre l'appli php et tomcat se fait par de simple lien dans une page php vers une url du serveur tomcat (qui contient des jsp standard de retour des fonctions)
    Comment faire pour m'assurer que les servlets de tomcat ne puissent pas être appelée sans authentification préalable de l'utilisateur dans l'appli php ?
    (ça revient a un échange de session en tre php et java mais je ne sais pas comment faire)
    Merci.


    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    en attendant une véritable intégration fonctionnelle de PHP dans java (et non l'inverse), je pense qu'il te faut gérer en parallèle les deux sessions (PHP et JAVA).

    c'est à dire
    créer un objet Utilisateur (login, mdp, profil)
    valoriser l'objet Utilisateur au moment de l'authentifiacaion PHP.

    stocker l'objet Utilisateur en session (HttpSession).

    vérifier lors de chaque appel à la servlet (il vaut mieux avoir une seule servlet de contrôle alors) la validité de l'utilisateur.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    en fait tu propose que :

    - lors de l'authentification de l'utilisateur, je créé une session sur les 2 serveurs (php et java)
    --> comment créer la session sous tomcat depuis php ?
    je fait un get (en php) sur une des servlets (disont servletAuth) qui crée la session ? (cela ne me semble pas trop sécurisé si n'importe qui peut appeler servletAuth...)

    - lors de l'appel des servlets je vérifie que j'ai une session java (ok c'est facile).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par benwa
    --> comment créer la session sous tomcat depuis php ?
    je fait un get (en php) sur une des servlets (disont servletAuth) qui crée la session ? (cela ne me semble pas trop sécurisé si n'importe qui peut appeler servletAuth...)
    Oui exact mais n'oublie pas que tu passera des parametres à cette servlet (login, mdp, etc).
    Et que si tu veux t'assurer de la validité de ces paramètres tu dois faire les mêmes controles qu'en PHP (vérification du login et du mot de passe).
    C'est pourquoi j'ai parlé de gestion en parallèle des sessions.

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    ok,
    au premier appel d'une servlet (n'importe laquelle puisqu'elles dérivent toutes d'un meme controler) je fait les memes vérifs qu'en php (login/mdp).
    le seul truc génant c'est que je vais faire transiter les mots de passes utilisateur en http à chaque appel (en clair dans l'url si je passe en GET ou dans la source HTML généré par php si je passe en POST)

    je me demandais juste s'il n'y avait pas une autre méthode d'échange des sessions :
    mettre l'idsession PHP dans une table temporaire et la passer aux servlets qui vérifient qu'on a bien l'idsession dans la table tempo);
    => pb: quand supprimer les idsession expirés (en php normalement) ?

    à terme l'appli tournera entierement en java, mais le plus urgent est de fair tourner "l'existant".

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Je me permets un conseil, ne jamais faire transiter un mot de passe en clair. Une bonne solution serait que PHP et TOMCAT communiquent directement sans passer par le navigateur de l'utilisateur.

    - Une solution est que ta servlet vérifie la sessionid auprés de PHP.

    Il me semble qu'il existe un framework qui permet l'échange de session entre serveurs d'une manière fiable et sûre. Un utilisateur s'identifie sur un serveur. Il peut ensuite naviguer entre plusieurs serveurs (ou WEB-application) en étant toujours identifié.
    Bien le bonjour chez vous
    Jowo

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    je viens de paramétrer php pour mettre ses fichiers de session (nom=sess_[idsession php]) dans c:\session
    dans ma servlet je reçoit phpsessid=sg55g56ff56gfd65gfdfgfd87 et je vais vérifier que j'ai bien un fichier valide c:\session\sess_sg55g56ff56gfd65gfdfgfd87
    => la notion de validité du fichier reste encore a définir car j'ai l'impression qu'une fois la session expirée, le fichier n'est pas effacé (simplement vidé ? taille=0ko)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    ou alors tu peux utiliser les cookies.

    tu stockes l'id session (PHP) dans le cookie
    tu compare l'id passé en parametre et l'id présent dans le cookie.

    Par contre je ne pense pas qu'un cookie non persistant (de session) crée par PHP puisse être accessible par la servlet.

    Donc reste à gérer la validité du cookie.

  9. #9
    Membre du Club
    Profil pro
    expert technique
    Inscrit en
    Septembre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    j'ai lancé un autre message concernant le même problème.

    http://www.developpez.net/forums/viewtopic.php?t=444827

    C'est URGENT !

    Je voudrais savoir si une solution as été trouvée pour ce problème !?

    Eric

  10. #10
    Membre confirmé

    Inscrit en
    Avril 2005
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 317
    Points : 553
    Points
    553
    Par défaut
    Il faudrait que lorsque tu appelles ta servlet :
    - tu lui passes en param ton session_id()
    - la servlet interroge une page isLogged.php située sur ton serveur php et lui repasse le session_id()
    - ta page isLogged.php se contente de regarder si la session est valide et renvoie OK ou KO
    - tu recupere ce retour dans ta servlet et tu traites en conséquence

  11. #11
    Membre du Club
    Profil pro
    expert technique
    Inscrit en
    Septembre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Merci pour ta réponse
    Il y a juste ce point qui me chagrine
    - ...
    - tu recupere ce retour dans ta servlet et tu traites en conséquence
    Le retour de isLogged.php renvoie OK ou KO à la servlet.
    Si j'ai bien compris, elle le fait avec des paramètres passés à la servlet en POST ou en GET.
    Et donc n'importe quelle page pourrait envoyer OK à la servlet et ainsi contourner l'authentification sur le site PHP.

    Qu'en penses tu ?

    Eric

  12. #12
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Citation Envoyé par greatmaster1971
    Bonjour,

    j'ai lancé un autre message concernant le même problème.

    http://www.developpez.net/forums/viewtopic.php?t=444827

    C'est URGENT !

    Je voudrais savoir si une solution as été trouvée pour ce problème !?

    Eric
    Pour eric ma solution ne marche pas puisqu'il ne peut pas changer la config de son Apache. Mais si tu le peux alors utiliser le mécanisme standard d'authentification Apache (htaccess) pour définir une zone protégée du nom de ta servlet. En ayant pris soin de liér tomcat et apache. Pour ne pas changer de domaine.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  13. #13
    Membre du Club
    Profil pro
    expert technique
    Inscrit en
    Septembre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    HTACCESS fonctionne t il aussi en lien avec une base de données d'utilisateurs et de mots de passe ?

  14. #14
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Il existe des modules d'authentification apache pour ldap, postgres, mysql en cherchant un peu on doit pouvoir trouver l'equivalent pour Oracle.

    Edit: Apparement depuis Apache 2.2, il y existe un module qui supporte toutes les bases de données: mod_authn_dbd
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  15. #15
    Membre du Club
    Profil pro
    expert technique
    Inscrit en
    Septembre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Il existe des modules d'authentification apache pour ldap, postgres, mysql en cherchant un peu on doit pouvoir trouver l'equivalent pour Oracle.
    Je cherche à authentifier via une table MYSQL.

    Il existe un module d'authentification mod_auth_mysql qui permet de vérifier la validité d'un utilisateur via une table MYSQL.
    De ce côté pas de problème.

    Par contre, au niveau de mon projet les servlets vont finalement être déployée sous WEBLOGIC.

    D'une,
    je ne sais pas si y'a moyen de coupler APACHE et WEBLOGIC

    De deux,
    la config d'APACHE n'est pas changée bouger à moins que le RSSI soit super sympa avec moi. Le serveur APACHE héberge déjà d'autres sites et je vois mal les admins me permettre de changer la config d'APACHE comme ça !?

    J'ai cherché comment éviter de coupler APACHE et le moteur de servlets. Mais à chaque fois ça implique de faire transiter des mots de passe via le navigateur (donc pas bon en terme de sécurité).

    Je tourne le problème dans tous les sens depuis plusieurs, aucune solution vraiment fiable pour le moment.

    Une autre idée m'a effleurée mais je ne sais comment m'y prendre :
    il faudrait que la servlet puisse lire dans les fichiers de session sur le serveur APACHE. Mais là il faudrait trouver un autre protocole qu'http pour éviter que ça passe par le navigateur.

    Quelq'un a t il des idées la dessus ?

    Eric

  16. #16
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Une autre idéee serait que ton serveur A hébergeant PHP communique avec le serveur B où se trouve les servlets en utilisant SSL (HTTPS) et les certificats.
    Je ne sais pas si c'est possible

    Les liens pointants sur B sont toujours dirigés sur A.
    A communique via un protocole sécurisé avec B et il lui communique la sessionID-A de l'utilisateur.

    Le serveur B mémorise sessionID-A dans une structure adéquate et il retourne au serveur A une sessionID-B.

    Le serveur A mémorise la sessionID-A et sessionID-B (avec le domaine du serveur B) dans un cookies prévu pour le serveur B et il retourne à l'utilisateur une redirection (4XX) vers le serveur B.

    Le serveur B lit le cookies et il contrôle dans la structure que le couple sessionID-A et sessionID-B est correct et encore valide.

    Je n'ai jamais essayé cette solution et je ne sais pas si elle est "faisable".


    [/code]
    Bien le bonjour chez vous
    Jowo

  17. #17
    Membre du Club
    Profil pro
    expert technique
    Inscrit en
    Septembre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    J'ai abandonné l'idée d'échange de sessions entre PHP et JAVA car je crois que ça tourne à l'usine à gaz.

    Par contre comme j'utilise une table MYSQL pour authentifier les utilisateurs sur le site PHP, j'ai essayé le module mod_auth_mysql.
    Le but étant de protéger l'emplacement des servlets via la directive <Location> dans le httpd.conf d'APACHE. Le tout en précisant le host où sont les servlets, le port ainsi que les directives pour se connecter à la table utilisateurs MYSQL.
    Conclusion : ça ne marche pas : mod_auth_mysql permet de protéger des ressources situées sur le meme host qu'APACHE avec <Directory>

    Les servlets vont finalement être déployées sous WEBLOGIC.
    J'ignore s'il est possible de le coupler avec APACHE comme on peut le faire avec TOMCAT.

    Quelqu'un aurait il une idée à ce sujet ?

    Eric

  18. #18
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Utilise ton serveur PHP comme proxy.

    Toutes les requêtes aux servlets passent par le serveur PHP. Ce dernier relaie l'interrogation aux servlets et il retourne la réponse à l'utilsateur.
    Bien le bonjour chez vous
    Jowo

  19. #19
    Membre régulier Avatar de zambizi
    Inscrit en
    Juin 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 109
    Points : 95
    Points
    95
    Par défaut
    Mon problème c'est qu' je doit echanger une session entre une application web développé en PHP et une aure développé en java, comment je peut faire pour que je puisse récupérer les information de login voir l'username et le motdepasee?
    Ghazi Sabri IT's Fun.

    http://dzit.wordpress.com

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/10/2012, 13h51
  2. Echange de données entre PHP et Java
    Par warwill dans le forum Langage
    Réponses: 10
    Dernier message: 20/08/2010, 17h48
  3. [Sessions] Partage de sessions entre PHP et ASP.NET
    Par tomlev dans le forum ASP.NET
    Réponses: 4
    Dernier message: 09/11/2008, 15h41
  4. Pont entre php et java
    Par cornnery dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2008, 20h34
  5. échange de session entre APACHE et TOMCAT
    Par greatmaster1971 dans le forum Langage
    Réponses: 8
    Dernier message: 21/01/2006, 10h10

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