Java 无法使用Google任务进行身份验证-家庭作业

Java 无法使用Google任务进行身份验证-家庭作业,java,rest,oauth,google-tasks,Java,Rest,Oauth,Google Tasks,本周我要开发一个小程序,我需要在localhost上使用Java Servlet创建一个Web应用程序,该Web应用程序需要执行以下操作: 从GitHub获取并显示公共组织的问题 通过OpenID ConnectOAuth 2.0获得身份验证 使用REST从问题在默认任务列表上创建Google任务 注意:我只能使用HTTP,不能使用jar库 第一部分很简单,只需向GithubAPI发出请求并解析JSON,这里没有问题 第二部分有点简单,我必须在Google开发者控制台中创建一个新的客户端ID,在

本周我要开发一个小程序,我需要在localhost上使用Java Servlet创建一个Web应用程序,该Web应用程序需要执行以下操作:

从GitHub获取并显示公共组织的问题 通过OpenID ConnectOAuth 2.0获得身份验证 使用REST从问题在默认任务列表上创建Google任务 注意:我只能使用HTTP,不能使用jar库

第一部分很简单,只需向GithubAPI发出请求并解析JSON,这里没有问题

第二部分有点简单,我必须在Google开发者控制台中创建一个新的客户端ID,在那里我设置了回调并在上面接收代码,我将把它放在这里,以防我对它做了一些错误:

Login.java

callback.java

我的问题出现在第三部分,我得到的响应代码401未经谷歌授权,我肯定我做错了什么,但我真的不知道是什么错了。这可能是完全错误的,所以请容忍它:p

注意:为了获得API密钥,我使用了GoogleDeveloper控制台并为浏览器创建了一个密钥

GoogleStuff.java

我已经做了几天了,但由于其他项目也在缩短我的时间,我越来越难找到这方面的问题,这就是我请求您帮助的原因:


提前感谢

API将在返回401状态代码时指示访问令牌已过期。若要获取新的访问令牌,请向令牌端点发出请求,并包括客户端id、客户端密钥、刷新令牌和授予类型参数

你可以在这里找到更多信息


希望有帮助

我没有专业知识来帮助你完成谷歌任务,但我要发表评论,欢迎你来到StackOverflow,并就你的第一个问题向你推荐——你的格式很好,并且证明你已经尝试过自己解决问题,做得很好!谢谢你的好话,花了几分钟的时间来修改格式,以确保一切都很容易理解。如果你要浪费一些时间回答我的问题,我最好利用我的一些时间,让其他人尽可能容易地回答。
...
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    System.out.println("--New login request was received --");        
    resp.setStatus(302); 
    resp.setHeader("Location", GoogleStuff.AUTH_LINK);
}
...
...
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    Cookie c = new Cookie("googleCode", req.getParameter("code")); c.setMaxAge(60*60); //1 Hour
    //Example code received from Google
    //4/6POIUYwZA3tFCnX_2feRDGiPMQOU7At8HyfOzemMkOY.wtiPpsElo8wZoiIBeR5Q2m9sqEaFkwI
    resp.addCookie(c);
    resp.setStatus(302);
    resp.setHeader("Location","searchOrg");
}
...
...
public static String AUTH_LINK = "https://accounts.google.com/o/oauth2/auth?"+
                                "scope=https://www.googleapis.com/auth/tasks&"+
                                "redirect_uri=http://localhost:5005/callback&"+
                                "response_type=code&" +
                                "client_id=" + FirstHttpServer.CLIENT_ID +
                                "&approval_prompt=force";
...
public static void addTask(Issue i, String googleCode){
    try {
        String postURL = "https://www.googleapis.com/tasks/v1/lists/%40default/tasks?key=" + MyServer.API_KEY;
        URL url = new URL(postURL);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setRequestProperty("Authorization", googleCode);
        BufferedWriter httpRequestBodyWriter = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
        httpRequestBodyWriter.write(i.toJson());
        httpRequestBodyWriter.close();
        Scanner httpResponseScanner = new Scanner(connection.getInputStream());
        while(httpResponseScanner.hasNextLine())
            System.out.println(httpResponseScanner.nextLine());
        httpResponseScanner.close();
    } catch (IOException e) {
        System.out.println(e.toString());
        throw new RuntimeException();
    }