3

我想开发一个 Android 应用程序,允许用户使用他们的 Google 帐户登录(我认为它始终是一个电子邮件地址),而不是强迫用户创建一个新帐户。我对此有3个问题:

  • 当用户第一次启动应用程序时,我必须使用 AccountManager,对吗?如果用户只有一个 com.google 帐户,我会使用那个帐户,如果没有,我会问他要使用哪个帐户。我的问题是,我能否确定 AccountManager 中的每个 com.google 帐户都经过了正确的身份验证,并且应用程序可以确定用户是他所说的那个人,这样我就不必让他选择帐户每次应用程序启动时?

  • 该应用程序将有一个服务器,该服务器将在数据库中存储用户已解锁的受限内容,这就是它需要 Google 帐户的原因,以将用户的外键与内容的外键匹配以了解该用户已解锁的内容. 您如何建议我将 Google 帐户保存在数据库中作为用户表的主键?我可以存储 Google 帐户的电子邮件,但这不会有任何隐私问题吗?我还能用什么?我想 Google 帐户没有类似 Facebook ID 的整数值。

  • 我是否需要对我提到的任何这些操作使用 OpenID 或 oAuth 2.0?我问这个是因为当应用程序没有互联网连接时,我希望用户仍然能够访问他解锁并先前下载到手机中的受限内容。如果我使用需要互联网连接的 OpenID,对吗?所以用户不应该能够进入应用程序,这不是我想要的。

谢谢

4

1 回答 1

1

使用客户经理检查手机上可用的帐户并询问用户他想使用哪个帐户听起来是个好主意。我认为使用 OAuth 2.0 并在客户端应用程序中获取用户信息的 OAuth 2.0 访问令牌(可能https://www.googleapis.com/auth/userinfo.profile是您想要使用的范围)并在客户端与服务器通信时将其发送到您的服务器是一个好主意。然后使用userinfo Google API ,您的服务器可以使用访问令牌来确保用户是他声称的那个人。使用此 api,您可以获取可以使用的用户 ID,而不是用户的电子邮件。

获取身份验证令牌将需要访问 Internet,但由于仅在与自己的服务器通信时才需要它,因此您可以在那时获取令牌。

我不能 100% 确定 AccountManager 提供的帐户是否可以信任,但它会为您提供手机上可用的 google 帐户,而且我不知道有任何方法可以在没有访问权限的情况下将帐户添加到手机到帐户。如果这是可能的,那也将是一个非常大的安全问题,所以我认为您可以相信 AccountManager 提供的帐户是真实的。

当您在客户端上获得 OAuth 2.0 令牌时,如果可能的话,我建议您使用 Google Play 的 GoogleAuthUtil 而不是帐户管理器。有关这方面的更多详细信息,请参阅:简而言之,使用 OAuth2 请求 getAuthToken 和 getToken 有什么区别

于 2013-03-15T11:27:47.740 回答