Php 使用私有API REST(Android+;Symfony)

Php 使用私有API REST(Android+;Symfony),php,android,rest,symfony,authentication,Php,Android,Rest,Symfony,Authentication,我有一个用Symfony制作的有状态的phpweb应用程序,它使用cookies来保持应用程序中登录用户的会话的活跃性(我一直都是这样工作的,我对REST服务真的很陌生) 我正在使用这个web应用程序的业务逻辑制作一个RESTAPI,因此我可以在不同的环境中使用它(目前是Android) 为了保持API的私密性,我遵循symfony cookbook(),因此请求通过发送到每个请求头中的“apikey”提供服务 目前,这个“apikey”是在我的android代码中硬编码的伪字符串 我首先想到的

我有一个用Symfony制作的有状态的phpweb应用程序,它使用cookies来保持应用程序中登录用户的会话的活跃性(我一直都是这样工作的,我对REST服务真的很陌生)

我正在使用这个web应用程序的业务逻辑制作一个RESTAPI,因此我可以在不同的环境中使用它(目前是Android)

为了保持API的私密性,我遵循symfony cookbook(),因此请求通过发送到每个请求头中的“apikey”提供服务

目前,这个“apikey”是在我的android代码中硬编码的伪字符串

我首先想到的是Android中的登录屏幕,它向API发送一个用户和密码,这些凭证将在服务器端进行检查,如果它们正确,则向客户端发送一个“apikey”(基于这些凭证),然后不知何故,将其存储在客户机中,然后在API的每个请求的头中发送

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

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


谢谢你抽出时间

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

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

我对目前为止所做的工作不是很满意,但我需要继续。。。因此,最后(由于API将在HTTPS服务器上),在symfony端,我在security.yml中激活了基本http身份验证(
http\u basic:~
),然后在android端,我从登录活动中获取凭据,我对这些凭据进行编码(在Base64中),然后将其发送到API的每个请求(在标头中)。我终于找到了一些类似的解决方案,我是主机api.mywebsite.com的特殊身份验证人,然后,可以在此主机下使用api密钥创建特殊的提供者。最后,当用户“登录”时,我的服务器将向他发送API密钥,并将其存储在数据库中。我认为这是一个很好的解决方案,但我对这种编程感到不舒服。也许有时候我们可以用skype聊天:)