#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 закрыт для внешнего использования.