Как я могу закодировать API JSON REST для создания/обновления паролей в то время как быть как можно более безопасным и избежать различных проблем с использованием строк?
Ну ключи API API не являются настоящими паролями. У вас есть контроль над тем, как создаются ключи API, чтобы вы могли создать некоторую случайную строку, которая будет иметь очень низкое столкновение (т. Е. Двойной UUID) и очень низкую общую подстроку (в случае дедуплирования). После того, как клиент входит в REST API с помощью ключа, вы можете использовать временные токены, тем самым повышая вероятность того, что ключ API получит сбор мусора.
Что касается реальных паролей, которые используются для регистрации человека (возможно, для сброса ключа API), на самом деле у вас мало вариантов, поскольку почти каждый контейнер сервлетов будет преобразовывать параметры запроса в строки. Одним из вариантов cheesy является наличие клиента через Javascript (или независимо от ваших клиентов). Base64 кодирует пароль, а затем добавляет разделитель, а затем добавляет случайно сгенерированный номер или строку в пароль. На самом деле это не для обфускации, а для снижения вероятности сохранения одной и той же строки. Конечно, вы должны быть осторожны, чтобы декодировать в массив символов или байтов, а затем удалить случайный суффикс, манипулируя массивом символов или байтов (см. CharBuffer).
Другим сложным вариантом является подход облака микросервиса. Просто сделайте службу проверки подлинности, состоящую из нескольких крошечных циклических экземпляров robin, которые выполняют только аутентификацию. Быстрое перезапуска этих экземпляров JVM (для сброса памяти). Или, если они достаточно малы, они, надеюсь, собирают мусор чаще.
Предположим, что в вашем репозитории данных есть соленые пароли (в противном случае эта мера предосторожности довольно спорная).
Чтобы быть честным, хотя существует так много других угроз, что я действительно не думаю, что это стоит усилий для большинства случаев использования в среде HTTP-сервера.
Причина, по которой Java Swing использует char[]
для пароля, поскольку Swing используется для среды рабочего стола. В настольных средах гораздо чаще появляются вредоносные программы, такие как вирус/шпионское ПО, которые могут выполнять некоторые функции памяти для паролей.
Учитывая это, на самом деле клиенты, о которых вы должны беспокоиться, а не о сервере.
Прежде, чем вы доберетесь до весенней безопасности, вам придется избегать того факта, что большинство REST-фреймворков, включая весеннюю безопасность, встроенной веб-безопасности, извлекает пароль как параметр запроса ... Что такое String. –