GAE java应用程序中OAuth2中的授权无效

时间:2012-07-04 12:32:23

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

您好我正在尝试创建一个GAE / J应用程序,我必须从给定代码中检索访问令牌

所以这是我的/ oauth2callback servlet的代码

public class OAuth2Callback extends HttpServlet{

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
    String url = "https://accounts.google.com/o/oauth2/token";

        // FetchOptions opt = FetchOptions.Builder.doNotValidateCertificate();
           URL url1=new URL(url); 
           String param="grant_type=authorization_code&code="+req.getParameter("code")+"&client_id=anonymouns&client_secret=anonymous&redirect_uri=https://www.cloudspokestest.appspot.com/oauth2callback";

   HttpURLConnection connection = 
        (HttpURLConnection)url1.openConnection(); 
             connection.setDoOutput(true); 
             connection.setRequestMethod("POST"); 
             connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
             connection.getOutputStream().write( param.getBytes() ); 
          InputStream str= connection.getInputStream();
          BufferedReader reader=new BufferedReader(new InputStreamReader(str));
        String l="";
          while((l=reader.readLine())!=null){
              resp.getWriter().println(l);

          }


    }

}

但是在浏览器屏幕上我收到错误无效授权,响应代码为400.can任何一个请帮助如何删除此错误。

1 个答案:

答案 0 :(得分:0)

您最有可能收到此错误,因为您的网址中的参数值未进行网址编码。 redirect_uri的值以及可能code的值必须经过网址编码。

您可以使用java.net.URLEncoder对值进行编码。

也永远不要在字符串上使用getBytes(),因为它使用平台的默认字符编码将字符转换为字节。在另一台计算机上运行相同的代码或更改您的计算机配置可能会提供不同的输出。请始终使用getBytes(charsetname)