为我的休息api寻找一个好的身份验证方法我来了一个:
“什么是无状态身份验证? 同样,无国籍意味着没有国家。但是,如何在服务器上没有任何状态的情况下从令牌中识别用户?令人惊讶的是,这很容易!只需将所有数据发送到客户端。 那么你将存储/发送什么(发送到客户端/网络)?最简单的例子是访问令牌。访问令牌通常具有唯一ID,到期日期以及创建它的客户端的ID。要存储它,您只需将此数据放入JSON对象,然后使用base64对其进行编码。“
现在,拥有一个自包含令牌,您需要确保没有人可以操纵数据。为此,您应使用MAC算法或任何其他可用的数字签名方法对其进行签名。
这对我来说有点混乱,如何在请求到来时验证访问令牌(没有任何存储来匹配它),但我觉得这是一个好主意,我想实现它,任何建议都会非常有帮助
我的rest api非常简单我收到index.php的每个请求,然后我用请求类创建新对象来分析请求的每个元素。
请求类看起来像这样:
<?php
class Request {
public $url_elements;
public $verb;
public $parameters;
public function __construct() {
$this->verb = $_SERVER['REQUEST_METHOD'];
$this->url_elements = explode('/', $_SERVER['PATH_INFO']);
$this->parseIncomingParams();
$this->format = 'json';
if(isset($this->parameters['format'])) {
$this->format = $this->parameters['format'];
}
return true;
}
public function parseIncomingParams() {
$parameters = array();
if (isset($_SERVER['QUERY_STRING'])) {
parse_str($_SERVER['QUERY_STRING'], $parameters);
}
$body = file_get_contents("php://input");
$content_type = false;
if(isset($_SERVER['CONTENT_TYPE'])) {
$content_type = $_SERVER['CONTENT_TYPE'];
}
switch($content_type) {
case "application/json":
$body_params = json_decode($body);
if($body_params) {
foreach($body_params as $param_name => $param_value) {
$parameters[$param_name] = $param_value;
}
}
$this->format = "json";
break;
case "application/x-www-form-urlencoded":
parse_str($body, $postvars);
foreach($postvars as $field => $value) {
$parameters[$field] = $value;
}
$this->format = "html";
break;
default:
break;
}
$this->parameters = $parameters;
}
}
?>
在此之后,我继续使用适当的控制器,这是index.php /
之后的第一个元素非常感谢您的时间和对不起,如果问题不是很清楚,因为我是新来的休息:/