我正在使用来自 Apache 的 Oltu 库,并且正在尝试使用 OAuth2 通过 Google 进行身份验证。以下是相关代码:
OAuthAuthzResponse oar = OAuthAuthzResponse.oauthCodeAuthzResponse(request);
OAuthClientRequest clientReq = OAuthClientRequest
.tokenProvider(OAuthProviderType.GOOGLE)
.setClientId("<my-client-id>")
.setClientSecret("<my-client-secret>")
.setRedirectURI("https://test.example.com/oauthtest/oauth/google/auth")
.setCode(oar.getCode())
.setGrantType(GrantType.AUTHORIZATION_CODE)
.buildQueryMessage();
OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());
// This call fails with the OAuthProblemException
OAuthAccessTokenResponse oAuthResponse = oAuthClient.accessToken(clientReq,
OAuthJSONAccessTokenResponse.class);
我可以毫无问题地通过 Facebook 进行身份验证,但无论出于何种原因,这都失败了。我可以毫无问题地从 OAuthAuthzResponse 获取代码,所以我知道原始调用正在运行,但是这个后续调用失败了。
编辑:我已经放弃使用 Oltu 并坚持使用 HttpClient 库和手动执行 OAuth 舞蹈的更简单方法。它对我来说效果更好,我会将它推荐给任何想要可靠地针对多个 OAuth 提供者进行身份验证的人。只有 Twitter 要求我使用Scribe。