用于REST服务的Codeigniter auth密钥

时间:2013-05-20 17:26:05

标签: codeigniter rest restful-authentication

我正在使用Phil Sturgeon Rest Server编写一个简单的RESTful服务。我想通过使用此库提供的API密钥来保护我的方法。

不幸的是,这篇文章并没有很好的记录,我有点迷失。

我想验证用户(电子邮件/密码),然后生成一个auth密钥以发送每个其他请求。但似乎我已经需要auth密钥来生成一个...创建一个虚拟密钥似乎不太安全。对不起,如果这是一个愚蠢的问题,但最佳做法应该是什么?

1 个答案:

答案 0 :(得分:12)

如果您熟悉其他API,您会发现一种常见的模式。我建议使用身份验证方法,用户传递其电子邮件和密码,这将返回生成的唯一身份验证密钥。身份验证密钥就像一个会话ID,想一想cookie是如何工作的。然后所有其他API方法都应该检查$ this-> post('auth'),并且在处理每个请求之前需要将它与会话处理程序(即数据库或会话)进行比较。

好像很多代码好吗?不。

你的所有模型都应该有一个重载的构造函数:

class MyAPIController extends Rest_controller
{
    public function __construct()
    {
        parent::__construct();

        if(!authCheck($this->post('auth'))){
            returnFailedResponse();
            exit();
        }
}

然后正常编写API,就像Phil Sturgeon网站上的示例一样。 http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/

创建一个具有authCheck的模型来测试auth密钥是否有效,并为returnFailedResponse创建一个返回401 Unauthorized的方法。

在另一个控制器中,我们称之为'Auth',使用上面的构造函数。

现在每次调用你的api都应该为Auth设置一个标题。防爆。 'Auth:12m34k23b'。