Como implementar a 'autenticação baseada em token' de forma segura para acessar os recursos do site (ou seja, funções e dados) desenvolvidos no PHPFox?

Desejo usar métodos e recursos do código de um site desenvolvido emPHPFox.

Basicamente, receberei uma solicitação deiPhone/Android, Receberei a solicitação e passarei para a respectiva função a partir do código PHPFox, pegarei a resposta dessa função e retornarei de volta ao dispositivo.

Para esse fim, desenvolvi APIs REST usandoEstrutura fina.

Mas o principal bloqueador que estou enfrentando atualmente é acessar os recursos (ou seja, funções e dados) do site PHPFox.

Não estou entendendo como devo autenticar o usuário usando'Autenticação baseada em token' para acessar os recursos do site.

Se alguém pudesse me orientar na direção correta com algum exemplo útil de trabalho, seria realmente útil para mim.

N.B. : A implementação proposta de 'autenticação baseada em token' deve ser muito segura e rápida em velocidade. A segurança não deve ser comprometida de forma alguma.

A seguir está o código que tentei sozinho, mas não sei se está certo ou errado. Minha abordagem está correta ou errada. Por favor, alguém analise e informe-me o seu feedback.

Para criar um token, eu uso esta função que leva como parâmetros, os dados do usuário

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

Assim, um usuário pode se autenticar e receber uma matriz que contém um token (genericPart + seus dados, codificados) e hisData não codificado:

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

Em seguida, o usuário pode me enviar seu token + seus dados não codificados para verificar:

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

Estou certo?

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion