2014-03-26 70 views
0

我是PHP新手:)。我正在用PHP创建一个REST API,供移动客户端(Android和IOS)使用。目前,PHP网站(yii)允许用户使用用户名和密码登录(散列并存储在数据库中)。我想实现这一点的方式是,我可以有一个登录REST api调用,用于对用户进行身份验证并生成一个令牌(一些随机数或会话ID)并将该令牌的散列发送给客户端。然后,客户端可以每次在REST api调用时将该标记传递给http标头,并且api方法将在每次调用时验证这一点?REST API的验证令牌PHP中的

现在,

  1. 我想知道是否有这种方法的任何缺点?
  2. 也有任何PHP的例子如何做到这一点?
  3. 此令牌如何确保安全性?有人可以嗅探这个令牌并将它发送到请求中,并且服务器仍然允许它吗?或者假设我随着时间过期令牌,手机应该再次进行认证以获得新的令牌吗?

回答

0

我的答案不会是唯一的答案,我相信你会在这个问题上得到很多反馈。

首先散列。我不会建议这样做。在中间人攻击等情况下,人们可以通过路由来拦截哈希。通常URL中的敏感信息是一个不好的主意。

为什么不使用普通会话?在第一次呼叫时授权...然后会话已经在服务器和呼叫者身上创建...这样您可以确保接下来的请求得到授权。

用户/服务/服务器可以简单地引用创建的会话cookie,并通过这样做进行验证。这种方式更安全,不会暴露敏感信息。

And ..使用HTTPS,当然如果可能的话......否则这些信息也可以被攻击。这一切都取决于你想要的安全级别。您可以堆叠安全层......但如果您通过线路发送关于猫的信息,这可能没有意义:)

+0

好的。我如何在API中传递会话ID?有没有在PHP的代码示例? – appcoder

+0

那么你的PHP API应用程序已经能够创建会话...重要的是,使用API​​的应用程序能够使用会话ID引用cookie。使用CURL请求,您可以使用cookie jar。谈到这里http://stackoverflow.com/questions/13020404/keeping-session-alive-with-curl-and-php –

+0

我可以使用我的移动客户端的HTTP_COOKIE头在每个请求中传递会话ID吗? – appcoder