2016-06-07 65 views
1

我在为Java Web应用程序使用Google日历的URL回调时遇到问题。我成功地跟踪了文档,并在本地获得了这个工作,但我现在正试图在EC2实例上运行该工具。在Web应用程序上使用Google日历的OAuth 2.0

关于Google的快速入门教程声称选择应用类型为'other'。这在当地适合我。

但是,当我尝试在服务器上运行这个服务时,我会在日志中给出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"); 

但是,这将引发绑定异常,因为显然该端口已被使用。

选择一个我知道的端口是免费的(我试过9999)确实带我进入页面,允许我进行身份验证,因为URI与client_secret.json中声明的URI相匹配。然后,这将引发插座绑定失败例外:

所致:java.lang.Exception的:套接字绑定失败:[730048]只有一个 用法每个套接字地址(协议/网络地址/端口)是 通常允许的。

很多例子我已经在网上看到没有设置端口,然后允许AuthorizationCodeInstalledApp选择一个自由港,但如何将这项工作时,我们需要指定的API证书授权重定向的URI?

+1

通常,当某个进程/程序使用某个端口并且另一个进程尝试使用该端口时会出现该错误,从而导致冲突。由于该特定端口已被程序使用,因此其他程序无法使用该端口。所以确保你使用一个免费的端口。对于您有关OAuth的问题,您可以查看此[documentaion](https://developers.google.com/identity/protocols/OAuth2InstalledApp#choosingredirecturi)关于如何使用重定向URI。还要确保您使用的重定向URI必须与您在Google API控制台中为应用程序设置的重定向URI相同。 – KENdi

回答

0

我找到了解决方案。我实际上还有其他的东西在9999端口上运行,这就是为什么上述方法不适用于本地。 AuthorizationCodeInstalledApp构建器具有一个适用于EC2实例的setHost()方法。

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

我面临类似的问题,我有一个很简单的问题,应该setHost接收一个名称(example.com)或IP(188.168.2.2)?有或没有http://? – Aldeguer

相关问题