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 时控制台配置:
应用程序类型:Web 应用程序或其他
授权Java脚本来源:我的远程服务器来源
授权的重定向 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 选项。但它给出了同样的错误。
- 身份验证中是否有任何设置可以更改
修复 localhost:59363 部分 ?
- 应用程序类型:Web 应用程序 正确吗?
将其部署在生产服务器上,作为 应用程序类型:其他 是
已安装 个应用程序?
您需要将重定向 uri 设置为与您在 java 代码的 google 控制台中提供的相同。
@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)。
我正在使用 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 时控制台配置:
应用程序类型:Web 应用程序或其他
授权Java脚本来源:我的远程服务器来源
授权的重定向 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 选项。但它给出了同样的错误。
- 身份验证中是否有任何设置可以更改 修复 localhost:59363 部分 ?
- 应用程序类型:Web 应用程序 正确吗? 将其部署在生产服务器上,作为 应用程序类型:其他 是 已安装 个应用程序?
您需要将重定向 uri 设置为与您在 java 代码的 google 控制台中提供的相同。
@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)。