Java PHP ZF2中的android登录按钮和远程web登录

Java PHP ZF2中的android登录按钮和远程web登录,java,php,android,zend-framework2,google-play-services,Java,Php,Android,Zend Framework2,Google Play Services,我在谷歌上搜索,只找到了关于如何在android应用程序上创建登录按钮或如何在web应用程序上创建登录按钮的文档 我的场景是,android应用程序使用get/post http请求从我的网站检索信息,并获取json数据 我的android应用程序上有一个正常工作的android登录按钮 问题是,当我想使用get/post请求从我的网站检索信息时,我应该发送哪些信息,以便网站知道哪个用户正在检索该信息以及该用户是否已登录 我知道我不能只发送谷歌用户id,因为它不安全,很容易被黑客入侵。我猜我需要

我在谷歌上搜索,只找到了关于如何在android应用程序上创建登录按钮或如何在web应用程序上创建登录按钮的文档

我的场景是,android应用程序使用get/post http请求从我的网站检索信息,并获取json数据

我的android应用程序上有一个正常工作的android登录按钮

问题是,当我想使用get/post请求从我的网站检索信息时,我应该发送哪些信息,以便网站知道哪个用户正在检索该信息以及该用户是否已登录

我知道我不能只发送谷歌用户id,因为它不安全,很容易被黑客入侵。我猜我需要发送某种访问令牌,并在网站上解析该访问令牌,以便知道它是哪个用户。但我到底需要做什么呢

我的客户端是PHP和ZendFramework 2,ZfcUser和scn social auth,用于谷歌登录

如能提供有关该问题的任何信息,将不胜感激


感谢

在我之前的staff项目中,我已经为Zend Framework实现了我们的Api模块(它是版本1,但版本2是相同的)

基本上,我已经实现了OAuth协议1.0(rfc at),这是提高通用客户端(Android、iOS、Mac OSX、Windows Phone等)和web服务之间连接安全性的一种非常有效的方法

很快,它考虑强制使用https协议(我希望您使用的是https),使用基本OAuth参数(如OAuth_版本、OAuth_令牌等)对所有客户端get/post请求进行签名,所有这些都在rfc中进行了解释,以避免MITM和代理更改请求。使用此方法,我创建了一个特定的表,将请求和访问令牌存储到其中

因此:

  • 客户端具有使用者密钥和使用者机密
  • 服务器具有相同的使用者密钥和使用者机密
  • OAuth将使用该密钥对来验证连接
  • 客户端从服务器获取“请求令牌”
  • 客户端通过OAuth工作流执行通用用户名和密码登录到服务器
  • 客户端获取将存储在令牌db表中的访问令牌(如果登录成功),并将用于检查该设备上的用户是否已登录并获得使用该服务的授权(因此您可能还需要设备guid)
您可以找到关于如何实现自己的OAuth协议的好的指导方针和好的github项目(另请参阅Dropbox或Twitter开发人员等服务部分,了解他们如何使用OAuth提供服务)。考虑一下,您可以很明显地自定义OAuthTebug,一旦实现,附加的控件和令牌(我已经使用了AES-256加密和RSA 2048位用于一些自定义令牌,并且还用在OAuthWork所期望的先前步骤中的所接收的密钥组合来加密登录的用户名和密码)。p> 最后,您可以使用自定义令牌将客户机连接到您的web服务,这样,一旦经过身份验证,您就可以使web服务与google服务交互,并始终通过您的网站将信息返回给客户机


希望对您有所帮助

如果用户登录服务器与您要检索信息的服务器相同,您可以使用sessionId作为令牌

1.身份验证后,服务器在会话中存储userId 2.服务器使用session_id()获取sessionId,并将其返回到android客户端 3.将?PHPSESSID=sessionId参数添加到android客户端http请求中。 4.服务器从会话获取用户ID

session\u start()
根据通过
get
POST
请求传递的会话标识符或通过cookie传递的会话标识符创建会话或恢复当前会话

您可以将
GET
参数
PHPSESSID
添加到任何请求的url

$manager = \Zend\Session\Container::getDefaultManager();
//$manager = new \Zend\Session\SessionManager();
$PHPSESSID = $manager->getId();