【问题标题】:Google Oauth - TokenVerifier How to USE?Google Oauth - TokenVerifier 如何使用?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 抱歉回复晚了。如果我的应用程序只需要基于 Web 的用户怎么办?即使设备不同,只需使用网络浏览器登录即可。
    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 2015-11-23
    • 2010-12-14
    • 2017-02-13
    • 2011-06-27
    • 2012-01-09
    • 2018-07-07
    相关资源
    最近更新 更多