从Oauth2 Google通讯录API获取用户信息
我得到的错误:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized{
"code" : 401,
"errors" : [ {
"domain" : "global",
"location" : "Authorization",
"locationType" : "header",
"message" : "Invalid Credentials",
"reason" : "authError"
} ],
"message" : "Invalid Credentials"
}
下面的代码,我正在使用:
GoogleCredential credential = new GoogleCredential.Builder() .setTransport(this.TRANSPORT).setJsonFactory(this.JSON_FACTORY)
.setClientSecrets(Constants.CLIENT_ID, Constants.CLIENT_SECRET).build();
credential.setAccessToken(tokenResponse.getAccessToken());
credential.setAccessToken(tokenResponse.getRefreshToken());
直到这里,我得到了刷新令牌,访问令牌等
Oauth2 userInfoService = new Oauth2.Builder(this.TRANSPORT, this.JSON_FACTORY, credential.getRequestInitializer())
.setApplicationName(Constants.APPLICATION_NAME).build();
它在以下行失败:(不知道,为什么?)
Userinfo userInfo = userInfoService.userinfo().get().execute();
我在网上搜索过,但很少看到它的示例和稀有资料。任何机构都有想法吗?
我究竟做错了什么?
回答:
我猜 为空。
我已经通过将自定义请求初始化程序设置为凭证对象来解决了此问题
GoogleCredential credential = new GoogleCredential.Builder().setTransport(this.TRANSPORT).setJsonFactory(this.JSON_FACTORY)
.setClientSecrets(Constants.CLIENT_ID, Constants.CLIENT_SECRET).setRequestInitializer((new HttpRequestInitializer(){
@Override
public void initialize(HttpRequest request)
throws IOException {
request.getHeaders().put("Authorization", "Bearer " + accessToken);
}
})).build()
Google的文档规定了以下内容:
**例如,使用access_token查询字符串参数对UserInfo API的调用如下所示:
GET
https://www.googleapis.com/oauth2/v1/userinfo?access_token=
{accessToken}使用HTTP标头中的访问令牌对同一API的调用如下所示:
GET / oauth2 / v1 / userinfo HTTP / 1.1授权:Bearer
{accessToken}主机:googleapis.com **
希望这个能对您有所帮助
以上是 从Oauth2 Google通讯录API获取用户信息 的全部内容, 来源链接: utcz.com/qa/398281.html