微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

取消谷歌 OAuth2 授权

如何解决取消谷歌 OAuth2 授权

我正在创建一个需要访问 Google Api 的 Java 桌面应用。

我像这样授权应用程序:

Details credentialDetails=...;
List<String> scopes=...;
GoogleClientSecrets clientSecrets=new GoogleClientSecrets();
clientSecrets.setInstalled(credentialDetails);
LocalServerReceiver receiver=new LocalServerReceiver.Builder().setPort(8888).build();
NetHttpTransport httpTransport=GoogleNetHttpTransport.newTrustedTransport();
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport,JacksonFactory.getDefaultInstance(),clientSecrets,scopes)
    .setAccesstype("offline").build();
Credential credential = new AuthorizationCodeInstalledApp(flow,receiver)
    .authorize("user");

authorize() 然后使用 LocalServerReceiver#waitForCodeCondition#awaitUninterruptibly 等待授权完成。

问题是用户可以例如关闭浏览器窗口并忽略授权,我需要取消它(从另一个线程)。

我尝试使用 receiver.stop();,但是在执行 stop() 时,Condition 没有 signal() 并且执行授权的线程停留在 Condition#awaitUninterruptibly 中。

正常中断也不起作用,因为 LocalServerReceiver#waitForCode 使用 Condition#awaitUninterruptibly

如何取消其他线程的 OAuth2 授权?

我正在使用 com.google.oauth-client:google-oauth-client-jetty:1.22.0

解决方法

在 1.22.0 版本中,您不能使用 LocalServerReceiver#stop() 取消待处理的 authorize()

这是一个错误,已在 https://github.com/googleapis/google-oauth-java-client/issues/127

作为问题打开

已在 1.23.0 版中解决

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。