如何正确实例化 GoogleIdTokenVerifier / .setAudience() 做什么?
How to instantiate GoogleIdTokenVerifier properly / what does .setAudience() do?
我的指南
如果遵循 this Google 有关在服务器端验证 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()
的情况下使用它,或者我是否需要它以及它的用途。
在 .setAudience()
中,您必须通过所有客户 ID
的测试。您可以从 Credentials Page. It's explained here.
为您的客户获取 ID
感谢@StevenSoneff。
如果你没有得到基本概念
对于您希望服务器接受的每个客户端,您需要在“Developer Console”中创建一个项目。客户通过他们的“SHA-1”指纹来区分。例如,您可以有一个调试项目(将采用您的调试指纹)和一个发布项目。要使两者都起作用,您必须将这两个 `ID` 添加到服务器的 `GoogleIdTokenVerifier` 的 `.setAudience()` 中。
就我而言,如果您使用 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
。
我的指南
如果遵循 this Google 有关在服务器端验证 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()
的情况下使用它,或者我是否需要它以及它的用途。
在 .setAudience()
中,您必须通过所有客户 ID
的测试。您可以从 Credentials Page. It's explained here.
ID
感谢@StevenSoneff。
如果你没有得到基本概念
对于您希望服务器接受的每个客户端,您需要在“Developer Console”中创建一个项目。客户通过他们的“SHA-1”指纹来区分。例如,您可以有一个调试项目(将采用您的调试指纹)和一个发布项目。要使两者都起作用,您必须将这两个 `ID` 添加到服务器的 `GoogleIdTokenVerifier` 的 `.setAudience()` 中。就我而言,如果您使用 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
。