私はリクエストを使ったプログラミングにあまり詳しくないので、できるだけ簡潔にしようと思います。問題を説明できるかもしれません。
Googleアカウントのユーザー情報を取得するために使用できる認証トークンを取得しようとしています。次の形式でトークンを取得することに成功しました:https : //oauth2-login-demo.appspot.com/oauthcallback#access_token= {accesstoken}&token_type = Bearer&expires_in = 3600
次に、このチュートリアルのTODO#11に従いました:http ://www.sw-engineering-candies.com/blog-1/howtogetuserinformationwithoauth2inagwtandgoogleappenginejavaapplication
@Override
public LoginInfo loginDetails(final String token) {
String url = "https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token="
+ token;
final StringBuffer r = new StringBuffer();
try {
final URL u = new URL(url);
final URLConnection uc = u.openConnection();
final int end = 1000;
InputStreamReader isr = null;
BufferedReader br = null;
try {
isr = new InputStreamReader(uc.getInputStream());
br = new BufferedReader(isr);
final int chk = 0;
while ((url = br.readLine()) != null) {
if ((chk >= 0) && ((chk < end))) {
r.append(url).append('\n');
}
}
} catch (final java.net.ConnectException cex) {
r.append(cex.getMessage());
} catch (final Exception ex) {
log.log(Level.SEVERE, ex.getMessage());
} finally {
try {
br.close();
} catch (final Exception ex) {
log.log(Level.SEVERE, ex.getMessage());
}
}
} catch (final Exception e) {
log.log(Level.SEVERE, e.getMessage());
}
final LoginInfo loginInfo = new LoginInfo();
try {
final JsonFactory f = new JsonFactory();
JsonParser jp;
jp = f.createJsonParser(r.toString());
jp.nextToken();
while (jp.nextToken() != JsonToken.END_OBJECT) {
final String fieldname = jp.getCurrentName();
jp.nextToken();
if ("picture".equals(fieldname)) {
loginInfo.setPictureUrl(jp.getText());
} else if ("name".equals(fieldname)) {
loginInfo.setName(jp.getText());
} else if ("email".equals(fieldname)) {
loginInfo.setEmailAddress(jp.getText());
}
}
} catch (final JsonParseException e) {
log.log(Level.SEVERE, e.getMessage());
} catch (final IOException e) {
log.log(Level.SEVERE, e.getMessage());
}
return loginInfo;
}
そのコードを実行すると、エラーが発生します。
WARNING: Authentication error: Unable to respond to any of these challenges: {googlelogin=WWW-Authenticate: GoogleLogin realm="https://www.google.com/accounts/ClientLogin", service="lso"}
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}
GWTで開発モードで実行しています。デプロイして実行しようとしましたが、エラーも発生しました。
考えられる原因は次のとおりです。1)トークンがタイムアウトしました(ただし、取得したばかりです)2)最初にデプロイする必要がありますか?3)手順が適切に行われていませんか?(トークンを取得した後、最初にそれを検証する必要がありますか?どうすればよいですか?)
ここからどうすればいいのかよくわかりません。コミュニティからの助けを得ることを望んでいます。