Google Oauth - TokenVerifier如何使用?

时间:2015-10-28 11:51:24

标签: oauth google-oauth

我正在尝试使用Google OAuth登录&注册我的Web服务器应用程序。 这是我引用的页面:https://developers.google.com/identity/sign-in/web/backend-auth,但我仍然使用Google Client API,即文档中提到的TokenVerifier。我试图找到一些例子,但我找不到一个,因为我不知道如何处理样本显示的方法中的参数。

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;

...

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
.setAudience(Arrays.asList(CLIENT_ID))
.build();

// (Receive idTokenString by HTTPS POST)

GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null) {
  Payload payload = idToken.getPayload();
  if (payload.getHostedDomain().equals(APPS_DOMAIN_NAME)
  // If multiple clients access the backend server:
  && Arrays.asList(ANDROID_CLIENT_ID, IOS_CLIENT_ID).contains(payload.getAuthorizedParty())) {
System.out.println("User ID: " + payload.getSubject());
  } else {
System.out.println("Invalid ID token.");
  }
} else {
 System.out.println("Invalid ID token.");
}

例如,我知道这些CLIENT_ID,ANDROID_CLIENT_ID,IOS_CLIENT_ID参数在示例代码中(在参考页面中)的含义,但服务器只接收id_token,它基本上是一个String Text。 (这是由客户端的谷歌api,javascript)

因此,我没有将这些参数值从客户端传递到服务器。我知道谷歌显示了另一种方式:tokeninfo端点,但他们提到它仅为100个用户/月。 (如果我正确翻译它)但是,对于tokeninfo端点方式,它们返回包含客户端ID的JSON文件,我认为这将是我之前提到的参数的值,但我不想使用该令牌信息端点方法。

所以,我的问题是,如何为google文档页面中显示的示例代码获取正确的参数值?我只从客户端收到id_token值。

1 个答案:

答案 0 :(得分:0)

ANDROID_CLIENT_ID或IOS_CLIENT_ID应在服务器代码中进行硬编码(在配置文件中)。

基本上,您的服务器在请求中获取id_token,您需要通过检查其中的受众并确保它与您期望的值之一匹配来确定它是否适用于您的应用或服务器。