Как обменять код авторизации на токен доступа (Oauth 2.0), используя HTTP / REST в Java? - PullRequest
0 голосов
/ 04 апреля 2019

Я хотел бы разрешить моему серверу доступ к данным конкретного приложения на 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.Спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...