Не удается пройти проверку подлинности с помощью 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.
Вы можете найти больше информации по этой ссылке.
Надеюсь, это поможет!