Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Slim框架的带REST的API客户端机密_Php_Rest_Slim - Fatal编程技术网

Php 使用Slim框架的带REST的API客户端机密

Php 使用Slim框架的带REST的API客户端机密,php,rest,slim,Php,Rest,Slim,我有一个简单的REST API(使用Slim框架),用户可以在其中调用如下页面: subdomain.domain.com/api/musician/id/3273 检索和显示一些简单的JSON数据 我想在此添加一些身份验证,以便只有具有某种客户端ID(至少)的用户才能访问此数据。我希望用户能够在URL中传递他们的客户机机密/id信息,但我希望在不太破坏REST结构的情况下实现这一点 是否有某个框架或库对实现这一目标特别有效 由于REST是无状态的,如果您想要为不同的用户提供不同的数据表示(e

我有一个简单的REST API(使用Slim框架),用户可以在其中调用如下页面:

subdomain.domain.com/api/musician/id/3273
检索和显示一些简单的JSON数据

我想在此添加一些身份验证,以便只有具有某种客户端ID(至少)的用户才能访问此数据。我希望用户能够在URL中传递他们的客户机机密/id信息,但我希望在不太破坏REST结构的情况下实现这一点


是否有某个框架或库对实现这一目标特别有效

由于REST是无状态的,如果您想要为不同的用户提供不同的数据表示(ergo-stateful),那么您几乎需要对其进行切碎,这意味着对于每个请求,您将提供与特定实体无关的数据(关于用户状态)

所以,要么每次都对用户进行身份验证,要么临时cookie+会话,或者,如果您有第三方参与,OAuth

另请参见

也许这会有用


您可以使用HTTP basic auth per request来验证执行请求的用户是否是有效用户。

我也有一段时间遇到过这个问题,我也有一个关于这个主题的问题,但没有答案(在这里)

基本上,您的选择是OAuth或定制的

现在,对于oauth,他们正在使用版本2.0,您不应该使用oauth 1启动一个新项目,但问题是,oauth 2还远没有完成,而且目前对用于php的oauth 2服务器几乎没有支持。我不想说oauth2 2-legged/3-legged是复杂的,但它比它应该的要复杂得多,而且在阅读了很多关于这方面的帖子之后,我决定现在我应该使用其他东西,而不是oauth(另外,oauth的一个创建者离开了这个项目,因为他对这个项目的发展方向不满意)因为它处于“未决定”状态(当然,人们会争辩说它已经准备好使用了,但我不在乎,我想要已经被证明的东西,不想成为大公司测试oauth的实验鼠[是的,oauth是为了大公司的利益,而不是你的利益])

无论如何,回到我的问题,我一直喜欢Amazon使用api的方式,它的实现非常简单,为什么不朝着同样的方向发展呢?我的意思是,亚马逊是最大的api提供商之一,如果他们使用它,他们有真正的理由这样做。
说来说去,在不到2个小时的时间里,我就启动并运行了我的身份验证/授权协议,猜猜看,它很简单,我喜欢编写它(不会因为oauth而感到沮丧)。 帮助我开始的一篇好文章是:它基本上包含了你必须做的事情


所以,如果我是你,我会从那里开始:)

如果你的API客户机没有“代表”你的用户,那么在我看来OAuth是矫枉过正的

您可以发布的标准API密钥将起作用。如果需要,也可以添加请求签名


一些简单的示例:和

一些API服务要求您在请求的头中发送客户端id之类的内容。您的用户可以使用cURL将自定义头添加到他们的请求中,然后您可以在脚本中访问这些头