我正在尝试使用混合解决方案为我的网站实现“使用Github登录”功能 - 网站的javascript执行初始登录/凭据,重定向网址用于继续访问令牌请求的tomcat servlet。
我正在使用适用于Java的Google API oauth2库。
我的代码目前看起来像这样:
AuthorizationCodeTokenRequest tokenRequest =
new AuthorizationCodeTokenRequest(
new NetHttpTransport(),
new JacksonFactory(),
new GenericUrl("https://github.com/login/oauth/access_token"),
code)
.setClientAuthentication(
new ClientParametersAuthentication(
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET));
TokenResponse tokenResponse = tokenRequest.execute();
这不起作用,我得到以下异常:
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'access_token': was expecting ('true', 'false' or 'null')
我调查了一下,发现Github的响应不是json格式(JacksonFactory期望的),但实际上看起来像这样:
access_token=xxxxxxxxxxx&scope=user%3Aemail&token_type=bearer
我在https://developer.github.com/v3/media/#request-specific-version中发现我需要将请求的Accept http标头设置为 application / vnd.github.v3 + json ,以便在json中返回一些内容格式。
如何使用Google的oauth2 api执行此操作?
编辑: 根据{{3}}的回复,我解决了以下问题:
tokenRequest.setRequestInitializer(new HttpRequestInitializer()
{
@Override
public void initialize(HttpRequest request) throws IOException
{
request.getHeaders().setAccept("application/json");
}
});