Я хотел бы разрешить моему серверу доступ к данным конкретного приложения на Google Диске моего клиента.Поэтому мне нужно использовать OAuth 2.0 для приложений веб-сервера.Я следовал учебнику , предоставленному Google.Однако мне не удалось пройти шаг 5 (обменяйте код авторизации на токен доступа).Каждый раз, когда я получаю: Ошибка 400 Bad Request.
Я пытался проверить, не истек ли код, который был передан в моем запросе.Тем не менее, поскольку я использую свой код напрямую, когда получаю его, это не проблема.Я также проверил, авторизован ли мой redirect_uri в консоли Google для этого идентификатора клиента.
@GET
@Path("get-oauth-google-drive/{email}/{token}")
@Produces(MediaType.TEXT_PLAIN)
public String getOauthGoogleDrive(
@PathParam("email") String email,
@PathParam("token") String token
) {
String linkForOauth = "https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=" + client_id + "&redirect_uri=" + domain + "/rest/myresource/callback&scope=https://www.googleapis.com/auth/drive.appdata&access_type=offline";
return linkForOauth;
}
@POST
@Consumes({MediaType.APPLICATION_JSON})
@Path("granted-callback")
@Produces(MediaType.TEXT_PLAIN)
public String callbackGranted(
String msg
) {
System.out.println("Drive Access GRANTED");
return "";
}
@GET
@Path("callback")
@Produces(MediaType.TEXT_PLAIN)
public String callbackOauth(
@QueryParam("code") String code,
@QueryParam("scope") String scope
) {
try
{
HttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("https://www.googleapis.com/oauth2/v4/token");
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
InputStream inputStream = getResourceAsStream(CREDENTIALS_FILE_PATH);
GoogleClientSecrets googleClientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(inputStream));
String clientId = googleClientSecrets.getDetails().getClientId();
String clientSecret = googleClientSecrets.getDetails().getClientSecret();
String redirectURI = domain + "/rest/myresource/granted-callback";
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("code", code));
params.add(new BasicNameValuePair("client_id", clientId));
params.add(new BasicNameValuePair("client_secret", clientSecret));
params.add(new BasicNameValuePair("redirect_uri", URLEncoder.encode(redirectURI, "UTF-8")));
params.add(new BasicNameValuePair("grant_type", "authorization_code"));
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse response = httpclient.execute(httpPost);
System.out.println(response);
}
catch (Exception ex)
{
ex.printStackTrace();
}
return "Merci de votre inscription vous allez être redirigé incessamment sous peu.";
}
Шаги 1, 2, 3 и 4 работают нормально, но на шаге 5 всегда записывается ошибка 400 Bad Request.Спасибо за вашу помощь!