Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
430 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Authentification Synology via script php

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Authentification Synology via script php

n°2336056
rufo
Pas me confondre avec Lycos!
Posté le 28-06-2019 à 15:59:01  profilanswer
 

Bonjour,
Je galère depuis des heures pour faire un truc qui me paraît tout bête. Sur un NAS Synology, j'ai une appli file station. File station est accessible depuis internet via un reverse proxy en https://file.nomdedomaine.fr, le NAS se trouvant une Livebox (je précise car ça a son importance, la livebox v3 ne gérant pas le loopback même si apparemment, y'aurait une solution que j'ai pas encore testée décrite ici : https://forum.ubuntu-fr.org/viewtopic.php?id=2012531 )
 
Sur mon NAS, dans le web station, j'ai une petite appli web qui est accessible via des comptes utilisateurs (stockés dans une BD Mysql). File station est accessible par des comptes mais locaux au NAS et qui n'ont rien à voir avec mes comptes de l'appli web.
Voulant donner accès au file station de manière transparente à mes utilisateur de l'appli web, je me suis dit : facile, je vais créer un compte générique sur le NAS qui aura accès au file station et sur l'appli web, je vais mettre un lien vers un script php qui se chargera de faire l'authentification (de manière plus ou moins cachée à l'utilisateur) vers file station en utilisant le compte générique.
 
J'ai trouvé l'API de Synology mais quand je veux faire, depuis un script php situé sur le NAS, un appel à l'url https://file.nomdedomaine.fr/webapi [...] format=sid, ça marche pas. Si je remplace https://file.nomdedomaine.fr par https://192.168.1.xx:7001, ça marche. Le problème, c'est qu'après, quand je faire la redirection vers https://file.nomdedomaine.fr, la session n'existe pas puisqu'elle a été créée pour https://192.168.1.xx:7001 :(
 
Connaissez vous une façon de se connecter au file station via un script php et permettre l'affichage de son IHM à l'utilisateur ensuite ?
Merci :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
mood
Publicité
Posté le 28-06-2019 à 15:59:01  profilanswer
 

n°2336069
B4X
kebab-case
Posté le 28-06-2019 à 22:35:20  profilanswer
 

En gros tu veux logguer un visiteur sur ton "file panel" mais sans jamais lui divulguer ton combo login/password?


---------------
In vanitas veritas.
n°2336070
rufo
Pas me confondre avec Lycos!
Posté le 28-06-2019 à 22:55:07  profilanswer
 

Oui, c'est ça.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2336071
B4X
kebab-case
Posté le 28-06-2019 à 23:26:16  profilanswer
 

Il te faut nécessairement t'authentifier avec l'IP de ton serveur web (192.168.x.x). En somme, ton script php va servir de proxy sur toute ta webapp "file panel".
Comme tu le dis si bien : "Le problème, c'est qu'après, quand je faire la redirection vers https://file.nomdedomaine.fr, la session n'existe pas puisqu'elle a été créée pour https://192.168.1.xx:7001 :(". Ce n'est pas un problème, c'est justement comme cela que ça doit fonctionner. C'est un bon point de départ. Tu ne dois plus, après avoir loggué ton script sur le panel, rediriger ton user vers https://file.ndd.fr, mais vers https://ton-appli-web.com/proxy.php?url=file.ndd.fr
Dans la mesure où proxy.php est déja loggué, c'est lui qui va s'occuper de charger et afficher file.ndd.fr avec les cookies qui vont bien.
Cherche "CURL" sur google, et "php proxy script". Le concept est assez trivial. En pratique le plus chiant, c'est qu'à chaque fois que tu vas retourner une page de file.ndd.fr à ton user, il faudra bien veiller à y transformer les liens hypertextes pour qu'ils passent tous par ton proxy.php. Ca devient plus tendax si ton "file panel" est full js.
C'est sur ce principe que fonctionnent tous les sites "web proxy" (par exemple kproxy point com). Dans ton contexte quasiment c'est pareil, sauf que tu réalise une étape initiale où tu log le visiteur sur file.ndd.fr, et tu limite son périmètre de navigation au domaine file.ndd.fr. Tout ça peut effectivement très bien se faire en php.


---------------
In vanitas veritas.
n°2336076
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2019 à 19:21:42  profilanswer
 

Je ne pensais pas que ça serait si compliqué. Je sens venir les ennuis car l'IHM du file station est beaucoup basé sur du javascript :/
Je sens que je vais devoir filer le login/mdp du compte générique à mes users qui se chargeront de se connecter eux-mêmes.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2336079
B4X
kebab-case
Posté le 29-06-2019 à 20:06:09  profilanswer
 

C'est potentiellement pénible à gérer s'il y a des requêtes XHR oui.
Si t'es prêt à communiquer le login/pass à tes users, essaye peut-être plutôt d'abord de voir si le form d'authentification au File Panel n'est pas vulnérable à une faille CSRF. Typiquement, si la requête POST n'envoie que le username et password, et qu'il n'y a rien qui ressemble à "csrf_token" ou "authenticity_token" etc... (tu peux le voir dans l'onglet Network de la console web de ton browser, raccourci F12), c'est qu'il y a moyen de faire qqchose comme ça sur ton appli web:
 

Code :
  1. <iframe style="display:none" name="frameCsrf"></iframe>
  2.     <form method="post" action="https://file.ndd.fr/login" target="frameCsrf" id="formulaireCsrf">
  3.     <input type="hidden" name="username" value="utilisateur_generique">
  4.     <input type="hidden" name="password" value="password_generique">
  5.     <input type="submit" style="display:none;">
  6. </form>
  7. <script>
  8.     document.getElementById("formulaireCsrf" ).submit();
  9.     window.top.location.href = "https://file.ndd.fr/panel";
  10. </script>


 
En gros tu log ton user à son insu sur le File Panel, de façon transparente.
Un user qui va sniffer les packets ou fouiner dans la console peut bien entendu récupérer le login/pass générique mais tu viens de dire que tu étais de toute façon prêt à les divulguer.
 
Après, tu as probablement les sources du File Panel si c'est du self hosted. Tu devrais probablement pouvoir y puiser des bouts de code pour intégrer ça sur ta propre appli.


---------------
In vanitas veritas.
n°2336080
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2019 à 22:34:41  profilanswer
 

J'ai tenté un truc du genre avec une requête ajax en exploitant l'API d'authentification du Synology. Mais le navigateur a détecté une tentative de CSRF et a bloqué la requête sauf si j'arrive à mettre une instruction Access-Control-Allow-Origin: mon_appli.fr sur le file station.
Sauf que je ne vois pas comment faire ça et je doute que modifier à la main le code source du file station soit une bonne idée.
 
Synology fiat des applis relativement bien sécurisées : ce ne sont pas des débutants.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2336082
B4X
kebab-case
Posté le 29-06-2019 à 23:39:17  profilanswer
 

Dans la conf du serveur web qui fait tourner ta file station:
 
sous Nginx: add_header
http://nginx.org/en/docs/http/ngx_ [...] odule.html
 
sous Apache: Header set
https://httpd.apache.org/docs/curre [...] aders.html
 
Ou en PHP [:petrus75]  
header('Access-Control-Allow-Origin: blabla');  


---------------
In vanitas veritas.
n°2336103
rufo
Pas me confondre avec Lycos!
Posté le 30-06-2019 à 19:10:07  profilanswer
 

En php, j'avais trouvé, mais c'est côté serveur qu'il faut le mettre, pas dans mon script php (j'ai essayé).
Merci pour ton aide, je vais voir si je trouve comment faire ça sur le Synology.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2336341
rufo
Pas me confondre avec Lycos!
Posté le 03-07-2019 à 17:27:39  profilanswer
 

C'est bon, j'ai fini par trouver une solution full JS :
1) via window.open() je charge l'url de mon API d'authentification Synology
 
2) avec un settimeout, j'attends x secondes pour laisser le temps à l'API de renvoyer le résultat de l'authentification. Là, je pars du principe que ça a fonctionné. A priori, pas de raison que ça plante vu que c'est moi qui aie fixé le login/mdp. Le settimeout appelle une fonction Login()
 
3) Ma fonction Login() ferme la fenêtre ouverte précédemment puis redirige l'utilisateur sur l'url de mon file station.
 
Et ça marche :) Bon, le seul truc, c'est que l'utilisateur doit valider la première fois l'autorisation des popups.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Authentification Synology via script php

 

Sujets relatifs
Erruer code java script inconnue[Script réseau] monter lecteur reseau avec variable
Petit script clavier virtuel[résolu] Authentification https avec API Géoportail
pb script VBA sous Word pour export feuilles - laisse 1 pageScript qui récupère données fichier Excel vers document
Recherche script PHP pour créer des bases de données[VB/VBA/VBS] Problème script pour exécuter des programmes
Soucis avec script overlay.Comment faire ce script ?
Plus de sujets relatifs à : Authentification Synology via script php


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR