我想使用在PHPFox中开发的网站代码中的方法和资源。
基本上,我将接收来自iPhone/Android
的请求,我将从PHPFox代码中获取请求并传递给相应的函数,从该函数获取响应并将其返回给设备。
为此,我使用超薄框架开发了REST。
但我目前面临的主要障碍是访问PHPFox网站的资源(即功能和数据)。
我不明白如何使用“基于令牌的身份验证”对用户进行身份验证,以便访问网站资源。
如果有人能用一些有用的工作例子来指引我正确的方向,那将对我真的很有帮助。
注:建议的“基于令牌的身份验证”的实现应该是非常安全和快速的。安全性不应该以任何方式受到损害。
以下是我自己尝试的代码,但我不知道它是对还是错。我的方法是正确还是错误。请有人分析它,让我知道你的反馈。
为了创建一个令牌,我使用这个函数,它接受用户的数据作为参数
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);
}
因此,用户可以对自己进行身份验证,并接收包含令牌(genericPart + his数据,已编码)和未编码的hisData的数组:
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);
}
然后,用户可以向我发送他的令牌+他的未编码数据,以便检查:
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
我说的对吗?
谢谢。
发布于 2015-03-21 00:31:32
首先,您应该了解什么是基于令牌的身份验证。它可以解释如下。
基于令牌的身份验证系统背后的一般概念很简单。允许用户输入其用户名和密码以获取令牌,该令牌允许用户获取特定资源,而无需使用其用户名和密码。一旦获得令牌,用户就可以将令牌提供给远程站点,该令牌在一段时间内提供对特定资源的访问。
现在让我们看看在REST web服务中实现它的步骤是什么。
它将使用以下控制流:
请参阅下图了解控制流程
您可能想知道什么是JWT
JSON JWT代表JSON Web Token,是在授权头部中使用的一种令牌格式。此令牌可帮助您以安全的方式设计两个系统之间的通信。出于本教程的目的,让我们将JWT重新表述为“持有者令牌”。持有者令牌由三个部分组成:头部、负载和签名。
您不需要实现承载令牌生成器,因为您可以使用php-jwt。
希望上面的内容能解释你的困惑。如果您在实现基于令牌的身份验证时遇到任何问题,请让我知道。我可以帮你。
https://stackoverflow.com/questions/29121112
复制相似问题