使用Slim Framework的PHP RESTful Web服务,需要身份验证还是反对无状态?

时间:2013-02-27 14:09:43

标签: php rest restful-authentication slim

我正在使用Slim Microframework编写RESTful Web服务,并使用GET从mysql数据库(选择查询)读取数据,并使用POST / PUT / DELETE在数据库中插入/更新/删除行。

现在我的问题是,如果每个人都能够在数据库中写入或删除数据,这不是一个大的安全问题吗?但我怎么能阻止这种情况,我认为REST中的ST代表状态转移(因此webservice是无状态的),这与登录或未登录状态相矛盾。如果我将一些登录数据传递给允许在数据库中写入的客户端,那么一个坏人是不是可以捕获logindata并使用它来伪造请求,例如删除所有条目?

那么,通常的方法是什么,我发现的唯一Slim Framework示例总是显示路由示例,而不是如何保护它。

Slim Framework中是否还有一些机会实现我所需要的?它应该尽可能简单,并且响应的响应几乎与没有验证或类似的响应一样快。没有像密码这样的敏感数据,对我而言,并非每个拥有cURL命令行工具的人都可以删除所有行或类似的东西。

如果有人能解释我该做什么和/或举一些例子,那将会很棒。我还需要知道,我可能需要在允许发送请求的客户端进行更改。

非常感谢。

4 个答案:

答案 0 :(得分:1)

每个请求都必须经过身份验证和授权。

人们常常被“无国籍”这个词所束缚。这实际上只意味着从一个请求到下一个请求,RESTful服务没有用户状态的先验知识。

但是,显然允许服务知道刚刚发出请求的经过身份验证的用户,否则它将如何决定是否允许访问?

因此,您可以在每个请求期间将经过身份验证的用户“存储”在某个变量中。然后由您决定如何使用此信息来授权请求​​。

我喜欢保持简单,并将所有用户作为URI链中的资源。他们提出users/{username}/someresource等请求。

我使用http基本身份验证(通过SSL)进行身份验证,并根据URI进行授权。如果请求验证失败,则为401 Unauthorized Request。如果URI {username}和authenticated {username}不匹配,则请求为403禁止。如果经过身份验证和授权,则允许请求(http代码取决于http动词)

现在已经覆盖了Web服务,现在是Web服务客户端。这当然是存储状态,否则您的用户每次发出请求时都必须登录。

您只需将用户会话存储在应用程序中(按照正常的会话管理),并在会话中存储用户名和密码(当然加密)。现在,每次发出请求时,您的Web服务客户端都需要检索用户名和密码,并将其与请求一起发送到您的Web服务。

答案 1 :(得分:0)

它将是无国籍的,在某种意义上说,确实没有会话或cookie。您通常会发出INSERT / UPDATE / DELETE所需的密钥。

然后,您可以通过每个请求传递密钥并确定密钥何时过期。

答案 2 :(得分:0)

它与普通的http身份验证会话一样安全。这些使用cookie等来验证连接的用户对存储的会话状态。

无状态服务也不例外 - 令牌传递给服务,就像令牌存储在正常http的cookie中一样。如果您担心嗅探(IE中间人攻击),您可以通过SSL保护链接。

服务生成的身份验证令牌将被加密,并包含一个salt,该服务器还会针对每个请求验证该资源。您还可以限制会话时间以适应您的偏执,并检查源IP,用户代理等的更改,并在用户的令牌发生更改时使其到期。

答案 3 :(得分:0)

我最近遇到了类似的问题。根据此处人员的建议,我决定使用OAuth身份验证。

我正在使用HybridAuth一个用于OAuth的php包装器和开箱即用的登录Facebook,Twitter,Google,LinkedIn等解决方案。