我正在使用 Phil Sturgeon Rest Server 编写一个简单的 RESTful 服务。我想通过使用这个库提供的 API 密钥来保护我的方法。
不幸的是,这没有很好的记录,我有点迷茫。
我想对用户进行身份验证(电子邮件/密码),然后生成一个身份验证密钥以发送所有其他请求。但似乎我已经需要授权密钥来生成一个......创建一个虚拟密钥似乎不是很安全。抱歉,这是一个愚蠢的问题,但最佳做法应该是什么?
我正在使用 Phil Sturgeon Rest Server 编写一个简单的 RESTful 服务。我想通过使用这个库提供的 API 密钥来保护我的方法。
不幸的是,这没有很好的记录,我有点迷茫。
我想对用户进行身份验证(电子邮件/密码),然后生成一个身份验证密钥以发送所有其他请求。但似乎我已经需要授权密钥来生成一个......创建一个虚拟密钥似乎不是很安全。抱歉,这是一个愚蠢的问题,但最佳做法应该是什么?
如果您熟悉其他 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'。