11

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

不幸的是,这没有很好的记录,我有点迷茫。

我想对用户进行身份验证(电子邮件/密码),然后生成一个身份验证密钥以发送所有其他请求。但似乎我已经需要授权密钥来生成一个......创建一个虚拟密钥似乎不是很安全。抱歉,这是一个愚蠢的问题,但最佳做法应该是什么?

4

1 回答 1

13

如果您熟悉其他 API,您会注意到一个常见的模式。我推荐一种身份验证方法,其中用户传递他们的电子邮件和密码,这将返回一个生成的唯一身份验证密钥。auth key 就像一个会话 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 设置一个标头。前任。'认证:12m34k23b'。

于 2013-06-27T05:53:31.410 回答