为什么Google OAuth2会返回java.io.IOException?

时间:2015-05-11 12:18:26

标签: google-oauth oltu

在过去几周内,使用Google的Oauth2身份验证系统和Apache Oltu库的一套应用程序已停止运行。

所有通过Google注册或登录的尝试都会遇到同样的错误:

Login/registration action failed: java.io.IOException: Attempted read from closed stream.

最近一切正常,我们在中间时间内没有修改代码或应用程序。

Google端是否有更改导致所有这些请求失败?

我的Google开发者控制台似乎没有任何日志记录或信息。 在我的应用程序中,日志条目表示尝试验证哪个不成功。

现在失败的代码,曾经成功的是:

            // obtain a AuthRequest message to be sent to the OpenID provider
        OAuthClientRequest oauthRequest = OAuthClientRequest
                .authorizationLocation(discovery.getAuthzEndpoint())
                .setClientId(Oauth2Util.getClientId())
                .setRedirectURI(responseURL)
                .setResponseType(ResponseType.CODE.toString())
                .setScope(GOOGLE_SCOPE)
                .setState(state)
                .buildQueryMessage();

        response.sendRedirect(oauthRequest.getLocationUri());

触发异常:

java.io.IOException: Attempted read from closed stream.
感谢所有建议

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

好吧,我想我已经理解了发生了什么。它与OpenID退役有关,但有点倾斜

在我的代码中:

OAuthClientRequest oauthRequest = OAuthClientRequest
  .authorizationLocation(discovery.getAuthzEndpoint())

正在使用内部“发现”模块,该模块试图以在OpenID关闭时弃用的方式获取信息

首选的Oltu方式似乎是

OAuthClientRequest oauthRequest = OAuthClientRequest
    .authorizationProvider(OAuthProviderType.GOOGLE)

效果更好

rtm:https://cwiki.apache.org/confluence/display/OLTU/OAuth+2.0+Client+Quickstart