Desidero utilizzare metodi e risorse dal codice di un sito Web sviluppato in PHPFox.Come implementare l'autenticazione basata su token in modo sicuro per accedere alle risorse del sito Web (ovvero funzioni e dati) sviluppate in PHPFox?
Fondamentalmente, riceverò la richiesta da iPhone/Android
, riceverò la richiesta e passerò alla rispettiva funzione dal codice PHPFox, prendo la risposta da quella funzione e la restituisco al dispositivo.
Per questo scopo ho sviluppato API REST utilizzando Struttura sottile.
Ma il principale ostacolo che sto affrontando attualmente è l'accesso alle risorse (cioè funzioni e dati) del sito Web PHPFox.
Non riesco a capire come devo autenticare l'utente utilizzando 'Autenticazione basata su token' per accedere alle risorse del sito Web.
Se qualcuno potesse guidarmi nella giusta direzione con qualche utile esempio di lavoro sarebbe davvero utile per me.
N.B. : L'implementazione proposta di 'Autenticazione basata su token' dovrebbe essere molto sicura e veloce nella velocità. La sicurezza non dovrebbe essere compromessa in alcun modo.
Di seguito è riportato il codice che ho provato per conto mio ma non so se è giusto o sbagliato. Il mio approccio è corretto o sbagliato. Per favore qualcuno lo analizzi e fammi sapere il tuo feedback su di esso.
Per creare un token uso questa funzione che prende come parametri, i dati dell'utente
define('SECRET_KEY', "fakesecretkey");
function createToken($data)
{
/* Create a part of token using secretKey and other stuff */
$tokenGeneric = SECRET_KEY.$_SERVER["SERVER_NAME"]; // It can be 'stronger' of course
/* Encoding token */
$token = hash('sha256', $tokenGeneric.$data);
return array('token' => $token, 'userData' => $data);
}
Quindi, un utente può sola autenticazione se stesso e ricevere una matrice che contiene un token (genericPart + i suoi dati, codificati), e hisData non codificato:
function auth($login, $password)
{
// we check user. For instance, it's ok, and we get his ID and his role.
$userID = 1;
$userRole = "admin";
// Concatenating data with TIME
$data = time()."_".$userID."-".$userRole;
$token = createToken($data);
echo json_encode($token);
}
Quindi l'utente mi può mandare il suo i suoi dati non-codificati segnalino + al fine di verificare:
define('VALIDITY_TIME', 3600);
function checkToken($receivedToken, $receivedData)
{
/* Recreate the generic part of token using secretKey and other stuff */
$tokenGeneric = SECRET_KEY.$_SERVER["SERVER_NAME"];
// We create a token which should match
$token = hash('sha256', $tokenGeneric.$receivedData);
// We check if token is ok !
if ($receivedToken != $token)
{
echo 'wrong Token !';
return false;
}
list($tokenDate, $userData) = explode("_", $receivedData);
// here we compare tokenDate with current time using VALIDITY_TIME to check if the token is expired
// if token expired we return false
// otherwise it's ok and we return a new token
return createToken(time()."#".$userData);
}
$check = checkToken($_GET['token'], $_GET['data']);
if ($check !== false)
echo json_encode(array("secureData" => "Oo")); // And we add the new token for the next request
Ho ragione?
Grazie.
Prima di tutto grazie per aver mostrato interesse per il mio problema e per farmi capire cosa sia veramente "Autenticazione basata su token". Ma puoi per favore fornirmi l'esempio funzionante di php-jwt da zero in modo che io possa replicarlo nel mio sistema. Il codice dovrebbe includere tutto, dalla creazione della tabella del database, alla connettività tra PHP e MySQL, quindi alla creazione di token di sicurezza, alla verifica della validità del token di sicurezza per l'utente loggato corrente, ecc. Un'altra cosa potrebbe esserci più di un registro degli utenti in un momento e per ogni utente questa "autenticazione basata su token" dovrebbe funzionare. TY. – user2839497
Si prega di dare un'occhiata alla fine del mio corpo di domanda. Ho provato un codice. Puoi controllare se è corretto o meno. Sto facendo le cose corrette o no? – user2839497
C'è spazio per miglioramenti ma va tutto bene. Quello che devi fare è usare php-jwt per generare token e validazione. Starò molto meglio Ma va bene anche questo. – Techie