我的 grails 2.3.4 控制器的操作中有一些代码,它使用 google java 客户端库来访问 OAuth2 api。但是当我创建 GoogleAuthorizationCodeFlow 的实例时,我收到了 redirect_uri_mismatch 错误。谷歌给我的网址是这个http://localhost:60720/Callback
,虽然我在 google api 控制台中定义了回调 url,如下所示http://localhost:8080/<myAppName>/<controllerName>/<actionName>
。当我在地址栏中手动复制粘贴重定向网址并替换谷歌给我的网址时,我的应用程序运行良好。
我已将该应用程序注册为 Web 应用程序,而不是在 api 控制台中安装的应用程序。我能做些什么?请帮忙。如果我无法解决这个问题,那么我将恢复使用 REST Api。
ResourceLocator grailsResourceLocator
JsonFactory jsonFactory = JacksonFactory.defaultInstance
File clientSecretsFile = grailsResourceLocator.findResourceForURI("/configs/clientSecrets.json").file
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory, new InputStreamReader(new FileInputStream(clientSecretsFile)))
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport()
FileDataStoreFactory dataStoreFactory = new FileDataStoreFactory(new File(System.getProperty("user.home"), ".store/oauth2_sample"))
List<String> SCOPES = ["https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"]
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, jsonFactory, clientSecrets, SCOPES).setDataStoreFactory(dataStoreFactory).build()
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user")
Thanks.
好的,我找到了解决方案。
当你创建时new LocalServerReceiver()
改用new LocalServerReceiver.Builder().setPort(9089).build()
在本例中我选择了一些空端口 9089。实际上LocalServerReceiver
是一个监听google和google发送的http服务器code
参数到此服务器。现在您所要做的就是在重定向 URI 中创建一个新条目,在本例中如下所示:http://localhost:9089/Callback
。请注意,端口号与我在使用构建服务器时在代码中使用的端口号相同LocalServerReceiver.Builder()
class.
瞧!你从谷歌获得了access_token和refresh_token。
快乐编码...快乐 Java 客户...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)