java - OAuth 2.0 与 Web 应用程序上的 Google 日历

标签 java oauth google-calendar-api

我在 Java 网络应用程序的 Google 日历 URL 回调方面遇到问题。我成功地按照文档操作并在本地运行了它,但我现在尝试在 EC2 实例上运行它。

Google 上的快速入门教程说选择应用程序类型为“其他”。这对我本地来说效果很好。

但是,当我尝试在服务器上运行它时,我会得到要在日志中遵循的 URL,并且该 URL 每次都会通过不同的端口与 localhost 进行回调。由于应用程序不再在本地主机上运行,​​因此从未收到回调。

经过一番阅读后,当我在 Web 服务器上实际运行它时,我需要将凭据设置为“Web 应用程序”。这表明我需要定义“授权重定向 URI”并且需要具有正确的端口。

根据重定向到 URL 的教程,我使用了以下内容来对用户进行身份验证:

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");

After reading this SO post然后,我在代码中设置端口,以便我可以在凭据中输入相同的端口,然后进入 client_secret.json(我的应用程序当前在 8080 上运行)

我通过以下方式执行此操作:

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setPort(8080).build()).authorize("user");

但是,这会引发绑定(bind)异常,因为显然该端口已在使用中。

选择一个我知道是免费的端口(我尝试过 9999)确实会带我进入该页面以允许我进行身份验证,这是有意义的,因为 URI 与 client_secret.json 中指定的 URI 匹配。然后抛出一个套接字绑定(bind)失败异常:

Caused by: java.lang.Exception: Socket bind failed: [730048] Only one usage of each socket address ( protocol/network address/port) is normally permitted.

我在网上看到的很多示例都没有设置端口,这允许 AuthorizationCodeInstalledApp 选择一个空闲端口,但是当我们需要在 API 凭证中指定授权重定向 URI 时,这将如何工作?

最佳答案

我找到了这个问题的解决方案。实际上,我在端口 9999 上运行了其他东西,这就是上面的内容在本地不起作用的原因。 AuthorizationCodeInstalledApp 构建器有一个适用于 EC2 实例的 setHost() 方法。

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setHost(REDIRECT_URI).setPort(9999).build()).authorize("user");

关于java - OAuth 2.0 与 Web 应用程序上的 Google 日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685053/

相关文章:

java - 没有库的 Google Calendar API 示例

java - 如何在 android 中解析 Google 公共(public)日历?

java - 组合框依赖于另一个组合框 - JavaFX

java - 如何使用java复制curl命令?

java - 使用 FQL 删除 Facebook 帖子

Python - 值错误 : need more than 1 value to unpack

angularjs - 我缺少什么? Node.js strip 连接集成

javascript - 即使我是所有者并获得许可,Google Drive + Script 也会抛出权限错误

java - RCP E4 @UIEventTopic 未调用

Java - 基于顶点之间距离的邻接矩阵