使用私有的API REST(Android + Symfony)

3
我有一个使用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代码中的虚拟字符串。
我最初想要做的事情是在Android上创建一个登录屏幕,向API发送用户名和密码,服务器端将检查这些凭据,如果正确,则向客户端发送一个基于这些凭据的“apikey”,然后在客户端中存储它,并在每个API请求的标题中发送它。
我对这个“apikey”方法有些误解吗?(可能是的,当我写这篇文章时,似乎这个apikey是一个更“静态”的概念)。这个想法不是一种违反REST模式的“有状态”的概念吗?我的意思是,我保留了每个请求都要检查的内容。
我想实现的是在Android中进行登录,在服务器端检查凭据,然后(如果检查通过)让Android应用程序以安全的方式调用API...那么我该如何操作呢?
谢谢你的时间!
2个回答

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

0

我也在学习Android和Symfony相关的内容。我所理解的是,API密钥应该对每个用户都是唯一的,这意味着每个用户都应该有一个代表他们的API密钥,作为对您网站的订阅。它将像一个独特的登录一样工作,只不过使用REST时,您只需要API密钥进行身份验证,而不是登录名和密码。 在这种情况下,您的API密钥应该很难被发现。我想您应该使用用户的ID和登录名,因为它们都是唯一标识符,并从中制作一些东西,比如加密。 如果您已经学到更多的知识,听取您的经验将是一种乐趣。


我对自己目前的工作不是很满意,但我需要继续前进...因此,最终(由于API将在HTTPS服务器上),在Symfony方面,我激活了基本的HTTP身份验证(security.yml中的http_basic:〜),然后在Android端,我从登录活动中获取凭据,我将这些凭据编码(在Base64中),然后将其发送到每个请求头中的API。 - jolmos
我终于想出了一个类似的解决方案,我已经成为主机api.mywebsite.com的特殊授权用户,然后可以使用API密钥创建一个特殊提供程序。 最后,当用户“登录”时,我的服务器将向他发送API密钥,并将其存储在数据库中。我认为这是一个不错的解决方案,但我对这种编程方式感到不太舒服。 也许我们有时可以进行一些Skype交流 :) - Despirithium

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接