我正在使用Apache的Oltu库,并试图使用OAuth2通过谷歌进行身份验证。以下是相关代码:
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提供程序进行身份验证的人。只有推特要求我使用文士。
发布于 2014-04-16 21:25:06
谷歌的OAuth2在HTTP方法的主体中发送参数,而不是查询字符串。
尝试将buildQueryMessage()替换为buildBodyMessage()方法。
发布于 2015-04-06 19:38:47
我有一个Spring,OAuth2和Google集成程序,在那里我可以访问受保护的资源,如用户配置文件等等。
我认为您需要重构代码才能使用以下代码:
OAuthClientRequest request = OAuthClientRequest
.authorizationLocation("https://accounts.google.com/o/oauth2/auth")
.setClientId("")
.setRedirectURI("https://test.example.com/oauthtest/oauth/google/auth")
.setResponseType("code")
.setScope("https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.profile.emails.read https://www.googleapis.com/auth/plus.me")
.buildQueryMessage();此外,在处理回调时,需要确保发送"TokenLocation“、"RedirectURI”和需要为setCode("")设置的“代码”值。
请将我的答案从Apache、Spring安全、OAuth2和转到您的查询。确保您的代码细节正确到位。
https://stackoverflow.com/questions/22335307
复制相似问题