如何正确实例化 GoogleIdTokenVerifier / .setAudience() 做啥?
Posted
技术标签:
【中文标题】如何正确实例化 GoogleIdTokenVerifier / .setAudience() 做啥?【英文标题】:How to instantiate GoogleIdTokenVerifier properly / what does .setAudience() do?如何正确实例化 GoogleIdTokenVerifier / .setAudience() 做什么? 【发布时间】:2017-06-01 23:48:17 【问题描述】:我的指导方针
如果遵循thisGoogle 关于在服务器端验证 Google-Account-Tokens 的文档,但我有点困惑。
我的问题
GoogleIdTokenVerifier googleIdTokenVerifier = new GoogleIdTokenVerifier.Builder(new NetHttpTransport(), new JacksonFactory())
.setAudience(Collections.singletonList(CLIENT_ID))
.build();
在这段代码中,我发现transport
和jsonFactory
参数可以填充为new NetHttpTransport()
和new JacksonFactory()
here。它还描述了如何获取AudienceString
,但我无法弄清楚它的用途。我无法测试它,但我的问题是我是否可以在没有 .setAudience()
的情况下使用它,或者我是否需要它以及它的用途。
【问题讨论】:
这必须与您在 GoogleSignInOptions.Builder 中提供给 .requestIdToken() 的 CLIENT_ID 匹配(参见文档示例:developers.google.com/identity/sign-in/android/backend-auth),它必须与您的项目配置匹配。这里有一个完整的解释:android-developers.googleblog.com/2016/03/… @StevenSoneff 是的,谢谢伙计。现在一切正常:) 【参考方案1】:在.setAudience()
中,您必须传递所有客户端ID
。您可以从Credentials Page 为您的客户获取ID
。解释了here。
感谢 @StevenSoneff。
如果你没有掌握基本概念
对于您希望服务器接受的每个客户端,您需要在“开发者控制台”中创建一个项目。客户通过他们的“SHA-1”指纹来区分。例如,您可以有一个调试项目(将获取您的调试指纹)和一个发布项目。要使两者都工作,您必须将两个 `ID` 添加到服务器的 `GoogleIdTokenVerifier` 的 `.setAudience()`。【讨论】:
【参考方案2】:就我而言,如果您使用 Firebase 在 Android 或 ios 上获取 id 令牌。您应该按照这些说明在后端服务器上进行验证。
Verify ID tokens using a third-party JWT library
对我来说,我使用Google OAuth Client
作为第三方库,所以它很容易使用。
但是和这个文档有点不同。
Verify the Google ID token on your server side
CLIENT_ID
是您的 Firebase 项目 ID。
Issuer
必须设置为https://securetoken.google.com/<projectId>
。
需要使用GooglePublicKeysManager
并调用setPublicCertsEncodedUrl
设置为https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com
GooglePublicKeysManager manager = new GooglePublicKeysManager.Builder(HTTP_TRANSPORT, JSON_FACTORY)
.setPublicCertsEncodedUrl(PUBLIC_KEY_URL)
.build();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(manager)
.setAudience(Collections.singletonList(FIREBASE_PROJECT_ID))
.setIssuer(ISSUER)
.build();
如果您有多个发行者,则必须为每个发行者创建GoogleIdTokenVerifier
。
【讨论】:
以上是关于如何正确实例化 GoogleIdTokenVerifier / .setAudience() 做啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 之外正确实例化 Iluminate 类
如何使用 dotnet spark 正确实例化 spark 会话?
MultiBlocProvider 未实例化所有 bloc 提供程序 - 如何正确使用 MultiBlocProvider?