【发布时间】:2015-10-28 11:51:23
【问题描述】:
我正在尝试将 Google OAuth 与登录和注册一起用于我的 Web 服务器应用程序。 这是我引用的页面:https://developers.google.com/identity/sign-in/web/backend-auth,但我坚持使用 Google 客户端 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,它基本上是一个字符串文本。 (这是由客户端的 google api javascript 制作的)
所以,我没有将这些参数值从客户端传递给服务器。我知道谷歌显示了另一种方式:tokeninfo 端点,但他们提到它仅适用于每月 100 个用户。 (如果我翻译正确的话)但是,对于 tokeninfo 端点方式,它们返回包含客户端 ID 的 JSON 文件,我认为这将是我之前提到的参数的值,但我不想使用令牌info 端点方法。
所以,我的问题是,如何为 google 文档页面中显示的示例代码获取正确的参数值?我只收到来自客户端的 id_token 值。
【问题讨论】:
标签: oauth google-oauth