Я хочу создать пользователя в Google Duo с помощью Java Rest api. Следил за документацией, но получал ошибку

#java #java-8 #rest

Вопрос:

Я создаю Java Rest api для создания пользователей в Google Duo admin. Я следую документации https://duo.com/docs/adminapi и я добавил заголовок авторизации и даты/времени, но все равно получаю несанкционированную ошибку 401. Может ли кто-нибудь подсказать мне, что я делаю не так, я прочитал документ и добавил все обязательные заголовки.

 public static void POSTRequest() throws IOException {
    String userCredentials = "Username:Password";
    String basicAuth = "Basic "   new String(Base64.getEncoder().encode(userCredentials.getBytes()));
    String dateTime = OffsetDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME);
    String POST_PARAMS = "{n"   ""userId": 101,rn"  
            "    "id": 101,rn"  
            "    "title": "Test Title",rn"  
            "    "body": "Test Body""   "n}";
    URL obj = new URL("https://api-e9770554.duosecurity.com");

    HttpURLConnection postConnection = (HttpURLConnection) obj.openConnection();
    postConnection.setRequestMethod("POST");
    postConnection.setRequestProperty("Content-Type", "application/json");
    postConnection.setRequestProperty("Authorization", basicAuth);
    postConnection.setRequestProperty("Date", dateTime);
    postConnection.setDoOutput(true);
    OutputStream os = postConnection.getOutputStream();
    os.write(POST_PARAMS.getBytes());
    os.flush();
    os.close();

    int responseCode = postConnection.getResponseCode();
    System.out.println("POST Response Code :  "   responseCode);
    System.out.println("POST Response Message : "   postConnection.getResponseMessage());

    if (responseCode == HttpURLConnection.HTTP_CREATED) { //success
        BufferedReader in = new BufferedReader(new InputStreamReader(
        postConnection.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

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

        // print result
        System.out.println(response.toString());
    } else {
        System.out.println("POST NOT WORKED");
    }
}
 

Ошибка:

 {
  "code": 40101,
  "message": "Missing request credentials",
  "stat": "FAIL"
}

Response code: 401 (Unauthorized); Time: 2022ms; Content    length: 73 bytes
 

Комментарии:

1. Попробуйте basicAuth = "Bearer " ... вместо этого

2. Разве нет Duo SDK? Почему вы используете службы REST с Java, когда предоставляется SDK?

3. 401 означает «несанкционированный», т. е. API закрыт для внешнего использования.