Поток предоставления пароля Oauth 2 не работает в реакции с родным с axios - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь получить токен с сервера OAM, используя поток предоставления паролей OAuth 2.0 в собственном приложении. Но я всегда получаю 401 неверный идентификатор клиента.

Я пробовал на почтальоне, и он работает, а также я пытался с Java-кодом, он также работает, но когда я пытаюсь реагировать на native и axios, я всегда получаю 401 недопустимую ошибку параметра id клиента.

Java-код, который работает

открытый класс TestService {

private static String ACCESS_TOKEN_URL =
    "http://oauthservice/tokens";
//Redirect URI for Authorization flow
private static String REDIRECT_URI = "redirect_uri=http://ClientWebApp/index.html";
//Client Credentials
private static String CLIENT_ID = "xxxxxxxx";
private static String CLIENT_SECRET = "xxxxxxxxxxx";

private static String BASE_64_CREDENTIALS = "Basic " + new String(Base64.encode(CLIENT_ID + ":" + CLIENT_SECRET));
//Authorization and Token properties
private static String GRANT_TYPE = "grant_type=password";
private static String STATE = "state=getaccess";
private static String USERNAME = "username=xxxxxxx";
private static String PASSWORD = "password=xxxxxxx";

@GET
@Produces(MediaType.APPLICATION_JSON)
public String testService() {
    String accessToken = null;

    HttpURLConnection connection = null;

    try {
        System.out.println("###TestService called...: " );
        //Constructs post Data
        String params = GRANT_TYPE + "&" + USERNAME + "&" + PASSWORD;
        byte[] postData = params.getBytes(Charset.forName("UTF-8"));

        //Constructs URL and Connection objects, and sets headers
        URL url = new URL(ACCESS_TOKEN_URL);
        connection = (HttpURLConnection)url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Authorization", BASE_64_CREDENTIALS);
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        connection.setRequestProperty("Accept-Charset", "UTF-8");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Length", Integer.toString(params.getBytes().length));
        connection.setDoOutput(true);

        //Gets response and reads it
        OutputStream wr = new DataOutputStream(connection.getOutputStream());
        wr.write(postData);
        wr.flush();
        wr.close();

        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String inputLine;
        StringBuffer resp = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            resp.append(inputLine);
        }

        in.close();

        String res = resp.toString();

        System.out.println("res: "+res );      
        //Obtains access token from JSON object
        JSONObject obj = new JSONObject(res);
        accessToken = obj.getString("access_token");

    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException(e);

    } finally {
        if (connection != null) {
            connection.disconnect();
        }
    }
    return accessToken;
}

}

Реагирует на собственный код (я пробовал много способов, но ни один не работает)

1) axios.post ( "http://oauthservice/tokens", qs.stringify ({grant_type: "пароль", Имя пользователя: «хххххх», пароль: "XXXXXXX", область действия: "xxxxxxxx"}), { 'Content-type': 'application / x-www-form-urlencoded; charset = UTF-8', «Авторизация»: «Базовый xxxxxxxxxxxxxxxxxxx», })

  .then((response) => {
  alert(response)
  })
  .catch((error) => {
     alert(JSON.stringify(error.response))
  })

2)

Вардар ({ метод: «пост», url: «oauthservice / tokens», заголовки: { 'Content-type': 'application / x-www-form-urlencoded; charset = UTF-8', «Авторизация»: «Основные» + encoded_values, }, данные: qs.stringify ({
grant_type: "пароль", Имя пользователя: «хххххх», пароль: «ххххх», Объем: "XXXXXXXX" }) } ) .then ((ответ) => { Оповещение (ответ) }) .catch ((ошибка) => { Оповещение (JSON.stringify (error.response)) }); * * Тысяча двадцать-две

Я перепробовал множество сторонних пакетов, таких как https://www.npmjs.com/package/axios-oauth-client

Но они также дают ту же ошибку.

...