Android:如何从第三方模块使用 GoogleAuthUtils 获取 ID_TOKEN?
Android: How to get ID_TOKEN using GoogleAuthUtils from a third-party module?
因此,我正在构建一个 Android 模块,它将作为 Gradle 依赖项(或 AAR 包)提供给 android 应用程序。例如。就像 Mixpanel 一样,Google Analytics 提供他们的模块来与他们的服务交互,我们将提供我们服务的 SDK 以便轻松地与我们的服务交互。
我将我们的模块称为 SDK,将包含它的应用称为父应用。
为了增强用户体验,我们想获取 ID_TOKEN 使用父应用程序的用户。但是获取 ID_TOKEN 涉及使用构建密钥的 SHA1 签名和包名称在 cloud.google.com 中创建客户端 ID。
当有人将我们的 SDK 包含在他们的应用程序(父应用程序)中时,我们无法知道他们构建密钥的 SHA1 签名是什么以及他们的包的名称是什么。
我想知道我们如何才能做到这一点。或者更好的问题:是否只有在我们自己的应用程序中询问才能做到这一点?
谢谢。
我假设您指的是 Google 帐户的 ID 令牌(即使用 Google 登录)。
首先,GoogleAuthUtil.getToken 是检索 ID 令牌的传统方式,不会为您提供最佳的用户体验。查看此博客 post 了解详细信息:
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
其次,如果是 "Parent App" 请求令牌,应用程序的身份将是 "Parent App" 到 Google 的 OAuth 后端,你是对的,你无法伪装令牌检索作为您的应用程序。 (如果您可以伪装成一个应用程序,那是没有意义的。假设您将 SDK 分发给 100 个应用程序,用户向应用程序 1 授予 OAuth 授权不应让应用程序 2 自动获得授权)。
但只要你:
- 请您的 SDK 消费者注册 Google:
https://developers.google.com/identity/sign-in/android/start-integrating#get-config
- 请他们与您分享他们为“Web
应用程序”类型,您可以帮助他们生成您的配置文件
SDK 具备读取能力。
- 在您的 Android SDK / 模块中,您读取配置文件并在 GoogleSignInOptions.Builder.requestIdToken(CLIENT_ID_FROM_CONFIG_FILE)
时使用客户端 ID
- 在您的服务器上,确保检查 ID 令牌的 'audience' 是其中之一
已注册的客户端 ID。
那么应该可以了。
希望对您有所帮助。
因此,我正在构建一个 Android 模块,它将作为 Gradle 依赖项(或 AAR 包)提供给 android 应用程序。例如。就像 Mixpanel 一样,Google Analytics 提供他们的模块来与他们的服务交互,我们将提供我们服务的 SDK 以便轻松地与我们的服务交互。
我将我们的模块称为 SDK,将包含它的应用称为父应用。
为了增强用户体验,我们想获取 ID_TOKEN 使用父应用程序的用户。但是获取 ID_TOKEN 涉及使用构建密钥的 SHA1 签名和包名称在 cloud.google.com 中创建客户端 ID。
当有人将我们的 SDK 包含在他们的应用程序(父应用程序)中时,我们无法知道他们构建密钥的 SHA1 签名是什么以及他们的包的名称是什么。
我想知道我们如何才能做到这一点。或者更好的问题:是否只有在我们自己的应用程序中询问才能做到这一点?
谢谢。
我假设您指的是 Google 帐户的 ID 令牌(即使用 Google 登录)。
首先,GoogleAuthUtil.getToken 是检索 ID 令牌的传统方式,不会为您提供最佳的用户体验。查看此博客 post 了解详细信息: 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
其次,如果是 "Parent App" 请求令牌,应用程序的身份将是 "Parent App" 到 Google 的 OAuth 后端,你是对的,你无法伪装令牌检索作为您的应用程序。 (如果您可以伪装成一个应用程序,那是没有意义的。假设您将 SDK 分发给 100 个应用程序,用户向应用程序 1 授予 OAuth 授权不应让应用程序 2 自动获得授权)。
但只要你:
- 请您的 SDK 消费者注册 Google: https://developers.google.com/identity/sign-in/android/start-integrating#get-config
- 请他们与您分享他们为“Web 应用程序”类型,您可以帮助他们生成您的配置文件 SDK 具备读取能力。
- 在您的 Android SDK / 模块中,您读取配置文件并在 GoogleSignInOptions.Builder.requestIdToken(CLIENT_ID_FROM_CONFIG_FILE) 时使用客户端 ID
- 在您的服务器上,确保检查 ID 令牌的 'audience' 是其中之一 已注册的客户端 ID。
那么应该可以了。
希望对您有所帮助。