如何使用java在Google AppEngine(OAuth 2.0)中获取访问令牌

时间:2013-06-04 04:55:09

标签: google-app-engine oauth-2.0 google-oauth google-openid

我访问令牌Socket java.lang.RuntimeException时遇到异常:com.google.apphosting.api.ApiProxy $ FeatureNotEnabledException:

是否有任何解决方案可以发布交换令牌的请求(代码)

这是我的代码,用于检索访问令牌的代码我正在使用Httpclient是任何解决方案

index.jsp

中的

 response.sendRedirect("https://accounts.google.com/o/oauth2/auth?  scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email&state=%2Fprofile&response_type=code&client_id=158645513564-88hf7od82d09ipr7uiamd540jpd2da1g.apps.googleusercontent.com&redirect_uri=http://gfksgnbgfcv.appspot.com/index2.jsp");

在index2.jsp

<%@page import="com.login.client.TEST"%>
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@page errorPage="errorPage.jsp" %>
<%
   String code  =  request.getParameter("code");
   String data=TEST.getParseValue(code);
 %>
 <%=code%>
 <%=data %>

和Java代码

   package com.login.client;


  import java.io.IOException;
  import java.io.UnsupportedEncodingException;

  import java.util.ArrayList;
  import java.util.List;

  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  import net.sf.json.JSONObject;
  import net.sf.json.JSONSerializer;
  import net.sourceforge.htmlunit.corejs.javascript.json.JsonParser.ParseException;

  import org.apache.commons.httpclient.HttpClient;
  import org.apache.commons.httpclient.HttpException;
  import org.apache.commons.httpclient.HttpStatus;
  import org.apache.commons.httpclient.methods.GetMethod;
  import org.apache.commons.httpclient.methods.PostMethod;
  import org.apache.commons.httpclient.methods.StringRequestEntity;
  import org.apache.commons.io.IOUtils;


   public class TEST  {

 public static String   getParseValue(String code) {
        String token="no token";
        String foros = "code="+code +
                    "&client_id=<YOUR_CLIENT_ID>" +
                    "&client_secret=<YOUR_CLIENT_SECRET>" +
                    "&redirect_uri="+"http://gfksgnbgfcv.appspot.com/index2.jsp" +
                    "&grant_type=authorization_code";
     HttpClient client = new HttpClient();
        String url = "https://accounts.google.com/o/oauth2/token";
        PostMethod post = new PostMethod(url);
        post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        try {
            post.setRequestEntity(new StringRequestEntity(foros, null, null));
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        String accessToken = null;
        try {
            client.executeMethod(post);

            String jsonTxt = IOUtils.toString(post
                    .getResponseBodyAsStream());

            JSONObject json = (JSONObject) JSONSerializer
                    .toJSON(jsonTxt);
            String resp = post.getResponseBodyAsString();

            token = (String) json.getString("access_token");
        } catch (HttpException e) {
            token=e.getMessage();
            throw new RuntimeException(e);
        } catch (IOException e) {
            token=e.getMessage();
            throw new RuntimeException(e);
        } catch (Exception e) {
            token=e.getMessage();
            throw new RuntimeException(e);
        }
     return token;

      }

}

1 个答案:

答案 0 :(得分:2)

GAE不支持Apache HttpClient(至少没有tweaks)。您应该使用URLFetch API