unico login per più siti

enricocarli

Utente Attivo
26 Set 2014
46
0
6
Buongiorno,

volevo un'informazione: vorrei fare un unica pagina di login per più siti che risiedono in server diversi;
mi sembra si chiami sso questo sistema, qualcuno ha idea di come si possa fare una cosa del genere?

Di fatto si crea un pannello d'inserimento di amministratori, con user e password,
se le credenziali sono corrette c'è un cookie per la sessione,
ma come si fa a fare in modo che entri anche negli altri siti che non risiedono nello stesso server?

Si potrebbe memorizzare l'IP dell'amministratore una volta che le credenziali sono corrette ma poi?

Pensavo ma forse non è corretto, fare una pagina in php, che mostra gli IP degli amministratori una volta loggati,
poi con lo scrapping dagli altri siti fare un cookie che apra la sessione di login solo se hai l'IP corretto.

è sbagliato vero? Qualcuno ha idee migliori?

grazie in anticipo
buon week end
 
Capito, per cui se ho capito bene secondo te dovrei fare un db comune con tutti i siti, poi magari attraverso feed alimentare gli altri siti; ho capito bene? Ma questa soluzione vale anche per db di grosse dimensioni?

Grazie per la risposta
Buonanotte
 
ciao
attualmente ho un dominio col suo db, mia figlia ha un blog (altro dominio) in wordpress e si appoggia al mio db, in questo caso con tabelle diverse, ma essendo il db lo stesso niente vieta che ci possano essere tabelle in comune o, se serve, usare le stesse.
l'unica cosa che non so dirti è il fatto se i domini sono su server diversi.
eventualmente provo a chiedere ad altri mod se ne sanno qualcosa.
 
io sincermaente ci ho provato anche avendo due siti sullo stesso hosting. devi comunque chiedere al tuo hosting se te lo permette. per quel che ne so nella maggior parte dei casi per sicurezza non te lo permettono. A me tempo addietro non me lo permisero. io ora ad esempio uso un escomatage ma non si tratta di un login quindi non sapre dirti se questo potrebbe funzionare.
per escamotage altro nonf accio su un server di rilasciare un file php con i dati di una tabella in formato json e poi da un altro sito mi elggo quel file.
sicuramente si può fare anche con un login ma non sono certo che sia una via sicura, anzi credo proprio di no.
 
Grazie mille, per le risposte!
La mia era più che altro una curiosità;
Volevo sapere se era possibile fare una cosa del genere, e a me interessava fare proprio un sistema con siti che risiedono su server diversi. Non si deve lavorare sull'ip dell'utente che si logga secondo voi? È l'unico sistema che mi viene in mente...

Grazie mille e buona domenica
 
ciao
l'unico metodo che mi viene in mente è questo, ma da provare
fai sul sito (chiamamolo principale.it) un pag di log.php e la log_remoto.php
PHP:
<?php
session_start();
if(isset($_POST['log'])){
    //connessione al db di principale.it
    //verifiche user e pass e loro esistenza
    if(mysqli_num_rows($ris)==1){
        $_SESSION['user']=$riga['user'];
        $_SESSION['pass']=$riga['pass'];
        $riinvio_a=$_SESSION['nome_sito']."pinco_pallo.php";
        header("location url=$riinvio_a");
        exit();
    }else{
        //user e pass inesistenti
        $riinvio_a=$riinvio_a=$_SESSION['nome_sito']."index.php";
        header("location url=$riinvio_a");
        exit();
    }
}
?>
<!-- form inserimento user e pass -->
nella pagina di secondario.it (come sul principale) chiamata log_remoto.php usando un iframe, considerando pero che devi farle uguali per tutti i siti
PHP:
<?php
session_start();
$_SESSION['nome_sito']="http://www.secondario.it/";
/*
al posto di pinco_pallo.php la pagina a cui vuoi rinviare
nella pagina di log_remoto.php del di principale metterai http://www.principale.it/"
*/
?>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<!-- ......-->
        <iframe name="log"
               src="http://www.principale.it/log.php"
               width="732px"
               height="500px"
               scrolling="auto"
               frameborder="0"
               align="top"
               marginwidth="0"
               marginheight="0"
               allowtransparency="true">
      </iframe>
<!-- ......-->    
</body>
</html>
è evidente che tutti i siti dovranno avere le due pagine uguali, l'unica differenza sarà che nella pagina log_remoto.php
in principale.it $_SESSION['nome_sito']="http://www.principale.it/";
in secondario_1.it $_SESSION['nome_sito']="http://www.secondario_1.it/";
in secondario_2.com $_SESSION['nome_sito']="http://www.secondario_2.com/";
ecc....
comunque come detto tutto da provare
 
grazie borgoitalia,

proverò se funziona, intanto ti posto il codice di quello che ho pensato io:

sito primario:

PHP:
<?php
    /* UTENTE 1  */
    $user_1 = "mario";
    $password_1 = "1234";

    $site1_1 = "http://localhost/TEST/sito1.com/";
    $site2_1 = "http://localhost/TEST/sito2.com/";
    $site3_1 = "http://localhost/TEST/sito3.com/";

    echo sha1($user_1);
    echo "<br />";
    echo sha1($password_1);
    echo "<br />";
    echo sha1($site1_1);
    echo "<br />";
    echo sha1($site2_1);
    echo "<br />";
    echo sha1($site3_1);
    echo "<hr>";

    /* UTENTE 2  */
    $user_2 = "luigi";
    $password_2 = "0000";

    $site1_2 = "http://localhost/TEST/sito3.com/";
    $site2_2 = "http://localhost/TEST/sito5.com/";

    echo sha1($user_2);
    echo "<br />";
    echo sha1($password_2);
    echo "<br />";
    echo sha1($site1_2);
    echo "<br />";
    echo sha1($site2_2);
    echo "<hr>";

    /* UTENTE 3  */
    $user_3 = "toad";
    $password_3 = "9999";

    $site1_3 = "http://localhost/TEST/sito1.com/";
    $site2_3 = "http://localhost/TEST/sito3.com/";
    $site3_3 = "http://localhost/TEST/sito2.com/";
    $site4_3 = "http://localhost/TEST/sito7.com/";

    echo sha1($user_3);
    echo "<br />";
    echo sha1($password_3);
    echo "<br />";
    echo sha1($site1_3);
    echo "<br />";
    echo sha1($site2_3);
    echo "<br />";
    echo sha1($site3_3);
    echo "<br />";
    echo sha1($site4_3);
?>

sito secondario:

PHP:
<?php
    $url = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
    $uri = 'http://localhost/TEST/mysso';
    $get = file_get_contents($uri);
   
    $users = explode("<hr>", $get);

    foreach ($users as $user) {
        $users_ok = explode("<br />", $user);

        $n_elementi = count($users_ok);
        for ($i=0; $i < $n_elementi; $i++) { 
            if($i!=0 AND $i!=1){
                if (sha1($url)==$users_ok[$i]){
                    echo $users_ok[$i]."<br>";
                }
            }
        }
        echo "<hr>";
    }
?>

di fatto espongo tutti gli utenti con i siti a cui possono accedere nel sito primario,
usando sha1 così non mostro nulla, uso quel file per inserire nel db degli altri siti le coppie di user e password, magari usando un cron per tenerlo aggiornato.

Secondo te è corretto/sicuro?

ho scritto il codice in fretta ma dovrebbe capirsi in linea di massima,
poi inserirò form, sessioni e quello che manca.

fammi sapere
ciao
 

Discussioni simili