Wie kann die "Token-basierte Authentifizierung" sicher implementiert werden, um auf die in PHPFox entwickelten Ressourcen (d. H. Funktionen und Daten) der Website zuzugreifen?

Ich möchte Methoden und Ressourcen aus dem Code einer Website verwenden, die in @ entwickelt wurd PHPFox.

rundsätzlich erhalte ich eine Anfrage voniPhone/Android, Ich erhalte die Anfrage und übergebe sie aus dem PHPFox-Code an die entsprechende Funktion, nehme die Antwort von dieser Funktion und sende sie zurück an das Gerät.

u diesem Zweck habe ich REST-APIs mit @ entwickelSlim Framework.

Aber der Hauptblocker, mit dem ich derzeit konfrontiert bin, ist der Zugriff auf die Ressourcen (d. H. Funktionen und Daten) der PHPFox-Website.

Ich verstehe nicht, wie ich den Benutzer mit @ authentifizieren so 'Token-basierte Authentifizierung', um auf die Ressourcen der Website zuzugreifen.

Wenn mich jemand mit einem nützlichen Arbeitsbeispiel in die richtige Richtung leiten könnte, wäre das wirklich hilfreich für mich.

N.B. : Die vorgeschlagene Implementierung von "Token Based Authentication" sollte sehr sicher und schnell sein. Die Sicherheit sollte in keiner Weise beeinträchtigt werden.

Following ist der Code, den ich selbst ausprobiert habe, aber ich weiß nicht, ob er richtig oder falsch ist. Ist mein Ansatz richtig oder falsch? Bitte analysiert es jemand und teilt mir euer Feedback dazu mit.

Um ein Token zu erstellen, benutze ich diese Funktion, die als Parameter die Daten des Benutzers verwendet.

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);
}

Also kann sich ein Benutzer authentifizieren und ein Array empfangen, das ein Token (genericPart + seine Daten, codiert) und hisData nicht codiert enthält:

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);
}

Dann kann der Benutzer mir sein Token + seine unverschlüsselten Daten senden, um Folgendes zu überprüfen:

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

Habe ich recht

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage