Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 跨平台应用:安卓&x2B;自定义REST后端(Yii2)和#x2B;用于登录的第三方SSO提供程序(Google+;)_Php_Android_Rest_Authentication_Yii2 - Fatal编程技术网

Php 跨平台应用:安卓&x2B;自定义REST后端(Yii2)和#x2B;用于登录的第三方SSO提供程序(Google+;)

Php 跨平台应用:安卓&x2B;自定义REST后端(Yii2)和#x2B;用于登录的第三方SSO提供程序(Google+;),php,android,rest,authentication,yii2,Php,Android,Rest,Authentication,Yii2,我感兴趣的是启动一个跨平台的web应用程序(web+mobile),它应该有自己的忠实用户群(就像任何好的应用程序一样) 后端由Yii2框架(PHP)提供支持,并公开几个需要用户身份验证的REST端点(oAuth2访问令牌)。用户可以通过调用专用的“登录”API端点来获得访问令牌,这是简单的部分,与此问题无关 我的应用程序的web版本还允许用户通过外部SSO(例如Google+)登录,这会导致用户在内部用户数据库中自动创建(加上连接到外部Google ID,因此同一用户的后续SSO请求会导致同一

我感兴趣的是启动一个跨平台的web应用程序(web+mobile),它应该有自己的忠实用户群(就像任何好的应用程序一样)

后端由Yii2框架(PHP)提供支持,并公开几个需要用户身份验证的REST端点(oAuth2访问令牌)。用户可以通过调用专用的“登录”API端点来获得访问令牌,这是简单的部分,与此问题无关

我的应用程序的web版本还允许用户通过外部SSO(例如Google+)登录,这会导致用户在内部用户数据库中自动创建(加上连接到外部Google ID,因此同一用户的后续SSO请求会导致同一“内部”用户自动登录)

这对于web+restapi对来说很好,但是,当我们把Android带到图片中时,事情开始变得复杂起来

Android应用程序能够为用户提供通过标准Android SDK通过其Google+个人资料登录的选项,我们可以通过这种方式检索其Google身份。然而,问题是——如何安全地将Android应用程序拥有的Google身份交换为REST API发布的访问令牌,而不要求用户在我们的内部数据库中输入用户名和密码(密码是在首次SSO登录时自动生成的,因此最终用户永远不知道自己的密码,他只使用SSO在web和移动平台上登录)。这里的关键字是“安全”,因为如果我们只相信Android应用程序正确验证了用户,并且不知何故“白名单”Android应用程序与REST端点之间的通信(例如,通过只有Android应用程序知道的“服务访问令牌”),潜在的黑客可以反向工程或嗅探两者之间的通信,并可以直接调用其余端点,使用相同的可信访问令牌标识自己。实际上,为任何随机用户获取访问令牌。

可能使用AccountManager?

您可以创建自己的帐户,然后使用具有本机安全性的本机帐户管理器和ID帐户管理器

在我的应用程序中,我这样使用: 在Yii2 RestService中使用HttpBearerAuth,在Android应用中使用登录名和密码创建自定义帐户,然后使用此帐户创建http请求。所有凭据都由Android管理