Как аутентифицировать / подключить API-интерфейс с защитой SSL в Java - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь подключиться к API безопасного отдыха SSL, который в основном использует запрос JSON и генерирует запрос JSON. Который с помощью почтальона я могу подключить / аутентифицировать API, я могу сделать запрос sh JSON и получить желаемый ответ JSON. Ключ publi c уже используется в организации API. во время использования почтальона API запрашивает выбранный сертификат SSL (установленный в браузере) из всплывающего окна, и когда я выбираю, он работает отлично.
Теперь, когда я пытаюсь подключить тот же API в JAVA, используя eclipse, я не могу аутентифицироваться. На самом деле я пытаюсь использовать pu sh файл .pfx (чей ключ publi c уже предоставлен организации API) в java. Но я получаю 401 ответ "Ошибка аутентификации".

Вот мой код :

public static String connectAPI(String a1,String a2,String a3,String a4,String a5,String a6,String a7,String a8,String a9) throws Exception {

    String url="https://apiURL.com";
    String name = "TEST1234";
    String password = "password";

    String authString = name + ":" + password;
    System.out.println("auth string: " + authString);
    byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
    String authStringEnc = new String(authEncBytes);
    System.out.println("Base64 encoded auth string: " + authStringEnc);
    URL object=new URL(url);
    HttpURLConnection con = (HttpURLConnection) object.openConnection();
    KeyStore ks = KeyStore.getInstance("PKCS12");
    FileInputStream fis = new FileInputStream("C://tmp/abc.pfx");
    ks.load(fis, "password".toCharArray());

    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(ks, "password".toCharArray());

    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(kmf.getKeyManagers(), null, null);


    con.setRequestProperty("Authorization", "Basic " + authStringEnc);
    System.setProperty("java.net.useSystemProxies", "true");
    if (con instanceof HttpsURLConnection) {
        ((HttpsURLConnection)con)
             .setSSLSocketFactory(sc.getSocketFactory());
    }

    con.setDoOutput(true);
    con.setDoInput(true);
    con.setRequestProperty("Content-Type", "application/json");
    con.setRequestProperty("Accept", "application/json");
    con.setRequestMethod("POST");
    con.connect();
    //con.setRequestProperty("User-Agent", "Mozilla/5.0");
     JSONObject main_body = new JSONObject();
    JSONObject jsonbdy = new JSONObject();
    JSONObject header=new JSONObject();
    JSONObject body =new JSONObject();
    header.put("a1",a1);
    header.put("a2", a2);
    header.put("a3", a3);
    header.put("a4", a4);
    header.put("a5", a5);
    body.put("a6",a6);
    body.put("a7", a7);
    body.put("a8", a8);
    body.put("a9", a9);
    jsonbdy.put("Header", header.toString());
    jsonbdy.put("Body", body.toString());
    main_body.put("JSONBDY", jsonbdy.toString());
    OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());
    wr.write(main_body.toString());

    wr.close();
    StringBuilder sb = new StringBuilder();  
    int HttpResult = con.getResponseCode(); 
    System.out.println("HttpResult:"+HttpResult);
    BufferedReader br;
    if (HttpResult == HttpURLConnection.HTTP_OK) {  
        br = new BufferedReader(
                new InputStreamReader(con.getInputStream(), "utf-8"));
    }else {
        br = new BufferedReader(
                new InputStreamReader(con.getErrorStream(), "utf-8"));
    }
    String line = null;  
    while ((line = br.readLine()) != null) {  
        sb.append(line + "\n");  
    }
    br.close();
   System.out.println(" return: " + sb.toString()); 
    return  sb.toString()
}       

Теперь я получаю следующее сообщение об ошибке:

return: { "httpCode":"401", "httpMessage":"Unauthorized", "moreInformation":"Authentication Failure" }

Я не могу решить это в течение длительного времени. Пожалуйста, сообщите мне, если я что-то упустил или нет.

...