使用私有API REST(Android + Symfony)

时间:2015-12-01 11:02:18

标签: php android rest symfony authentication

我在Symfony中创建了一个有状态的php Web应用程序,它使用cookie来保持应用程序中已登录用户的会话(我一直都是这样,我是REST服务的新手)。

我正在使用此Web应用程序的业务逻辑制作REST API,因此我可以在不同的环境中使用它(目前是Android)。

为了保持API的私密性,我遵循symfony cookbook(http://symfony.com/doc/current/cookbook/security/api_key_authentication.html),因此请求通过每个请求的标头中发送的“apikey”提供。

目前,这个'apikey'是我的android代码中硬编码的虚拟字符串。

我首先想到的这个'apikey'是Android中的登录屏幕,它向API发送用户和密码,这些凭证将在服务器端进行检查,如果它们是正确的,请发送给客户端'apikey'(基于这些凭据),然后以某种方式将其存储在客户端中,然后将其发送到API的每个请求的标头中。

我用这种'apikey'方法误解了一些东西? (可能是的,在我写这篇文章时,我觉得这个apikey是一个更“静态”的概念)。 难道这个想法不是一种反对REST模式的“有状态”吗?我的意思是,我会保存每个请求都要检查的东西。

我想要实现的是在Android中登录,检查服务器端的凭据,然后(如果此检查没问题)让Android应用程序以安全的方式调用API ... 那我该怎么办呢?

感谢您的时间!

2 个答案:

答案 0 :(得分:0)

我也在用Android和Symfony学习这些东西。我所了解的是,您的API密钥应该对每个用户都是唯一的,这意味着每个用户都应该在订阅您的网站时拥有代表他们的API密钥。它将像一个唯一的登录一样工作,除了使用REST,您只需要API密钥进行身份验证,而不是登录和密码。 在这种情况下,您的API密钥应该很难找到。我想你应该使用用户的ID和登录,因为它们必须都是唯一的标识符,并从中加入,如加密。 如果您从那时起了解更多信息,那么很高兴听到您的经验。

答案 1 :(得分:0)

我实施了ApiKey"模式"在我的Symfony网络应用程序中。 从我的角度来看,在正确的用户连接(使用登录名和密码)之后,您可以生成一个密钥,从而对任何唯一用户信息的concatation进行sha1加密,并使用uniqid的结果。