12

我设置了一个简单的 REST API(使用 Slim 框架),用户可以在其中调用这样的页面:

subdomain.domain.com/api/musician/id/3273

检索和显示一些简单的 JSON 数据。

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

是否有特定的框架或库可以特别有效地实现这一目标?

4

4 回答 4

8

我也有这个问题有一段时间了,我也有一个关于这个话题没有答案的问题(在这里)。

基本上你的选择是 OAuth 或自定义的。

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

无论如何,回到我的问题,我一直很喜欢亚马逊使用他们的 api 的方式,它实现起来非常简单,那么为什么不朝着同一个方向前进呢?我的意思是,亚马逊是最大的 api 提供商之一,如果他们使用它,他们有真正的理由这样做。
言归正传,在不到 2 小时的时间里,我的身份验证/授权协议启动并运行,你猜怎么着,这很容易,简单而且我喜欢编写它(不会因为 oauth 而感到沮丧)。一篇帮助我开始的好文章是这样的:http ://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/它基本上解释了你必须做什么。

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

于 2013-04-19T10:25:25.057 回答
5

如果您的 API 客户端没有“代表”您的用户行事,那么我认为 OAuth 是矫枉过正的。

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

一些 Slim 示例:这里这里

于 2013-04-22T13:02:01.700 回答
2

也许这可能有用的苗条HttpBasicAuth

您可以对每个请求使用 HTTP 基本身份验证来验证发出请求的用户是否是有效用户。

于 2013-04-18T10:11:46.133 回答
1

由于 REST 是无状态的,因此如果您想要为不同的用户提供不同的数据表示(ergo - 有状态),您几乎需要将其删除,这意味着对于每个请求,您将提供与特定实体无关的数据(关于用户状态)。

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

另请参阅Dave Ingram - API 设计演示

于 2013-04-16T12:22:41.213 回答