跨平台应用程序:Android +自定义REST后端(Yii2)+用于登录的第三方SSO提供程序(Google +)

时间:2017-01-06 21:24:19

标签: php android rest authentication yii2

我有兴趣创建一个跨平台的Web应用程序(web + mobile),它应该拥有自己的忠实用户群(就像任何一个好的应用程序一样)。

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

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

这适用于web + REST API对,但是,当我们将Android带入图片时,事情开始变得复杂。

Android应用程序可以向用户提供通过标准Android SDK登录其Google+个人资料的选项,我们可以通过这种方式检索他的Google身份。但是,问题是 - 如何安全地交换Android应用程序拥有的Google身份,用于REST API发出的访问令牌,而无需在内部数据库中询问用户的用户名和密码(密码是在第一次SSO期间自动生成的登录,所以最终用户永远不知道他的密码,他只使用SSO登录网络和移动平台)。这里的关键字是“安全”的,因为如果我们只是相信Android应用程序正确地验证了用户,并以某种方式“白名单”Android应用程序和REST端点之间的通信(例如通过只有Android应用程序知道的“服务访问令牌” ),潜在的黑客可以对两者之间的通信进行反向工程或嗅探,并且可以直接调用REST端点,使用相同的可信访问令牌来识别自己。实际上,为任何随机用户获取访问令牌。

1 个答案:

答案 0 :(得分:2)

也许使用AccountManager? https://developer.android.com/reference/android/accounts/AccountManager.html https://developer.android.com/training/id-auth/custom_auth.html

您可以创建自己的帐户,然后使用原生的andorid客户经理使用原生的seciurity?

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