我正在使用phil sturgeon REST_Controller为codeigniter创建一个REST api,到目前为止我已经能够创建一个简单的库来为用户生成api密钥.我的问题是现在为每个请求发送api密钥到API,如何在不必为每个请求手动发送它的情况下执行此操作.
我正在开发一个移动应用程序,它必须访问外部webapp(PHP + Codeigniter)来管理ajax查询的操作.
所以通过这种方式,存在一个问题.如果有人看到使用的URL,可以删除行,或从数据库修改用户的信息.所以我想在这个系统中没有这个:
成功登录后,我会这样做:
// getToken : https://stackoverflow.com/a/13733588/2154101
$this->session->set_userdata('private_token', getToken(50));
$public_token = getToken(50);
$this->session->set_userdata('secure_token', md5("$private_token:$public_token"));
$data['token'] = $public_token;
// some stuff ...
// send $data in JSON
Run Code Online (Sandbox Code Playgroud)
然后客户端将在下一个查询中使用公共令牌,我将在服务器上执行此操作:
$public_token = $this->input->post('token');
$data['token'] = get_public_token($public_token);
// some stuff ...
// send $data in JSON
Run Code Online (Sandbox Code Playgroud)
get_public_token使用此代码的助手位于何处:
public get_public_token($public_token) {
$last_secure_token = $this->session->userdata('secure_token');
$private_token = $this->session->userdata('private_token');
$actual_token = md5("$private_token:$public_token");
if ($actual_token === $last_secure_token) {
$public_token = getToken(50);
$this->session->set_data('private_token', getToken(50));
$this->session->set_data('secure_token', md5("$private_token:$public_token"));
return $public_token;
} else { // you are cheating me …Run Code Online (Sandbox Code Playgroud)