Android:如何使用来自第三方模块的GoogleAuthUtils获取ID_TOKEN?

时间:2016-05-16 06:10:48

标签: android sdk google-authentication

所以,我正在构建一个Android模块,它将作为Gradle依赖项(或AAR包)提供给Android应用程序。例如。就像Mixpanel一样,Google Analytics提供了与其服务互动的模块,我们将提供服务的SDK以便与我们的服务轻松互动。

我会将我们的模块称为SDK,并将其作为Parent App包含在其中。

为了增强用户体验,我们希望使用父应用程序获取用户的ID_TOKEN。但是,获取ID_TOKEN涉及使用构建密钥的SHA1签名和软件包名称在cloud.google.com中创建客户端ID。

当有人将SDK包含在他们的应用程序(Parent App)中时,我们无法知道他们的构建密钥的SHA1签名是什么以及他们的包名称是什么。

我想知道如何实现这一目标。或者是一个更好的问题:只有当我们在自己的应用程序中询问时才能做到这一点吗?

谢谢你。

1 个答案:

答案 0 :(得分:4)

我假设您指的是Google帐户的ID令牌(即使用Google登录)。

首先,GoogleAuthUtil.getToken是检索ID令牌的传统方式,它不会为您提供最佳用户体验。查看此博客文章了解详细信息: http://android-developers.blogspot.com/2016/05/improving-security-and-user-experience.html

您应该使用Auth.GOOGLE_SIGN_IN_API代替ID令牌检索: https://developers.google.com/identity/sign-in/android/backend-auth#send-the-id-token-to-your-server

其次,如果它是请求令牌的“父应用”,则应用的身份将是Google的OAuth后端的“父应用”,而你是对的,你无法将令牌检索伪装成你的应用。 (如果您可以伪装成一个单独的应用程序,那就没有意义。假设您将SDK分发给100个应用程序,用户向应用程序1提供OAuth授权不应该使应用程序2自动获得授权。)

但只要你:

  1. 请您的SDK消费者在Google注册: https://developers.google.com/identity/sign-in/android/start-integrating#get-config
  2. 请他们与您分享他们的注册客户ID“Web 应用程序“类型,你可以帮助他们生成一个配置文件 SDK能够阅读。
  3. 在您的Android SDK /模块中,您阅读配置文件并在GoogleSignInOptions.Builder.requestIdToken(CLIENT_ID_FROM_CONFIG_FILE)
  4. 时使用客户端ID
  5. 在您的服务器上,请确保检查ID令牌的“受众群体”是其中之一 已注册的客户ID。
  6. 然后它应该工作。

    希望它有所帮助。