Google api 从 java 读取 google sheet 时出现重定向 uri 问题

Google api redirect uri issue while reading google sheet from java

我正在使用 oauth2 google 驱动器 API 从 Java 中的 google sheet 读取数据。 我的本地机器上有一个工作示例。但是当我将它部署在远程服务器上时,在进行身份验证时 API returns a URL 将在浏览器中打开。 URL 如下所示:

https://accounts.google.com/o/oauth2/auth?access_type=online&approval_prompt=auto&client_id=my.client.id&redirect_uri=http://**localhost:58305**/Callback&response_type=code&scope=https://www.googleapis.com/auth/drive

显然这个 URL 不会在远程服务器上打开,因为没有本地主机。

我的 google 开发人员在生成 oauth 客户端 ID 时控制台配置:

  1. 应用程序类型:Web 应用程序或其他

  2. 授权Java脚本来源:我的远程服务器来源

  3. 授权的重定向 URI:我的远程服务器页面

当应用程序类型为 其他 时,身份验证在我的本地计算机上成功完成。 由于身份验证 URL.

中的 localhost 字符串,部署在远程服务器上时同样无法通过身份验证

另一方面,当应用程序类型是 Web 应用程序 时,它会在本地主机和远程服务器上给我一个错误页面,即使我添加了正确的来源,它也会出现如下错误在以上选项中:

Error: redirect_uri_mismatch

The redirect URI in the request, http://localhost:59363/Callback, does not match the ones authorized for the OAuth client. Visit https://console.developers.google.com/apis/credentials/oauthclient/my.client.id?project=my.project.id to update the authorized redirect URIs.

我尝试了多种重定向 URI 选项。但它给出了同样的错误。

  1. 身份验证中是否有任何设置可以更改 修复 localhost:59363 部分 ?
  2. 应用程序类型:Web 应用程序 正确吗? 将其部署在生产服务器上,作为 应用程序类型:其他 已安装 个应用程序?

您需要将重定向 uri 设置为与您在 java 代码的 google 控制台中提供的相同。

看看https://developers.google.com/api-client-library/java/google-api-java-client/oauth2#web_server_applications

    @Override
  protected String getRedirectUri(HttpServletRequest req) throws ServletException, IOException {
    GenericUrl url = new GenericUrl(req.getRequestURL().toString());
    url.setRawPath("/oauth2callback");
    return url.build();
  }

您构建重定向 url。目前您发送的是 localhost:58305/Callback

更新它,它应该可以工作

您使用了错误的 API 凭据类型。

对于您的项目,请转到:https://console.cloud.google.com/apis/credentials 并选择一个 OAUTH2 凭据(客户端 ID 类型:OTHER)。