Получение ошибки «Отсутствует отметка времени запроса» из API DUO: Код 40104

#java #api #duosecurity

Вопрос:

Кто-нибудь может помочь мне с этой ошибкой, с которой я сталкиваюсь? Я довольно новичок в java. Здесь я пытаюсь создать пользователя в API администратора, но когда я запускаю этот код, я получаю следующее

     import java.io.IOException;
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.util.Base64;
    
    // HTTP basic authentication example in Java using the RTC Server RESTful API
    public class Untitled {
    
        public static void main(String[] args) throws IOException, InterruptedException {
    
            // Customer ID
            final String customerKey = "key";
            // Customer secret
            final String customerSecret = "secret";
    
            // Concatenate customer key and customer secret and use base64 to encode the
            // concatenated string
            String plainCredentials = customerKey   ":"   customerSecret;
            String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes()));
            // Create authorization header
            String authorizationHeader = "Basic "   base64Credentials;
    
            HttpClient client = HttpClient.newHttpClient();
    
            // Create HTTP request object
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create("https://api-e9770554.duosecurity.com/admin/v1/users")).GET()
                    .header("Authorization", authorizationHeader).header("Content-Type", "application/json").build();
            // Send HTTP request
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    
            System.out.println(response.body());
        }
    }
 

ошибка

 {"code": 40104, "message": "Missing request timestamp", "stat": "FAIL"}
 

Ответ №1:

Это не имеет ничего общего с Java, а скорее с duosecurity.com API. Очевидно, что некоторые требуемые данные (метка времени запроса) отсутствуют.

На странице справки указано:

40104 Отсутствует отметка времени запроса
ПОЯСНЕНИЕ: Заголовок даты или даты X-Duo отсутствовал или был неправильно отформатирован.
РАЗРЕШЕНИЕ: Убедитесь, что заголовок даты или даты X-Duo существует и правильно отформатирован.

поэтому вам следует добавить что-то вроде

 .header("X-Duo-Date", "Tue, 17 Aug 2021 12:24:26 -0000") 
 

(Примечание: дата указана в формате RFC 2822)

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

1. Я думаю, что эта ошибка связана с токенами, срок действия которых истекает через некоторое время, а не с учетными данными. Поэтому кажется, что он должен авторизоваться, получить токен, а затем использовать его вместо этого. Я думаю, что @DaveMustaine нужно прочитать документацию по api duo.com/docs/authapi#/auth