Не удается пройти проверку подлинности с помощью Google Tasks - домашняя работа

На этой неделе у меня была небольшая программа для разработки, мне нужно было создать веб-приложение (используя Java-сервлет на локальном хосте), это веб-приложение должно выполнять следующие действия:

  • Получить и показать проблемы от общественных организаций из GitHub
  • Получите аутентификацию через OpenID Connect(OAuth 2.0)
  • Создать задачу Google в списке задач по умолчанию из проблемы, используя REST

Примечание: я могу использовать только HTTP, без jar libs


Первая часть была простой, просто нужно было сделать запрос к GitHub API и разобрать JSON, здесь нет проблем


Вторая часть была довольно простой, мне нужно было создать новый идентификатор клиента в консоли разработчика Google, где я бы установил обратный вызов и получил код, я добавлю его на всякий случай, если я что-то не так делаю Это:

Login.java

...
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);
}
...

callback.java

...
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");
}
...

Моя проблема касается третьей части, я получаю код ответа 401(не авторизован) от Google, я уверен, что я делаю что-то не так, но я действительно не знаю, что не так. Это, вероятно, все неправильно, так что терпите:p

Примечание. Чтобы получить ключ API, я использовал консоль разработчика Google и создал ключ для браузеров.

GoogleStuff.java

...
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();
    }

Я занимался этим пару дней, но другие проекты также затягивают мое время, и мне становится все труднее находить проблему с этим, поэтому я прошу вашей помощи:)

заранее спасибо

1 ответ

API будет указывать, что токен доступа истек, когда он возвращает код состояния 401. Чтобы получить новый токен доступа, сделайте запрос к конечной точке токена и включите параметры client_id, client_secret, refresh_token и grant_type.

Вы можете найти больше информации по этой ссылке.

Надеюсь, это поможет!

Другие вопросы по тегам