и насколько в общем случае серверы это понимают? Есть необходимость передавать с устройства на сервер некие данные (массив однородных записей), к ним нужно добавить что-то для аутентификации устройства. В устройстве стоит GSM-модем, умеющий только GET, POST и HEAD. Данных несколько килобайт, они бинарные, будут упакованы в protobuf. Обмен ведётся через HTTPS, так что передача аутентификационных данных в запросе считается безопасной. До этого данные только запрашивались с сервера, и имя устройства и "пароль" передавались в GET-запросе. Со стеком технологий на сервере не знаком, но знаю только, что там ASP.NET. Как лучше сделать?
1) Точно так же передавать, но в URL POST-запроса. Я не нашёл ни прямой рекомендации, ни прямого запрета так делать. Остаётся вопрос, поймёт ли это приложение на сервере, но это уже конкретно к серверным разработчикам.
2) Использовать какую-то из стандартных разновидностей HTTP Authentification (можно Basic). По стандарту предполагается запрос-ответная схема, когда мы сначала ломимся на ресурс без пароля и получаем ответ 401 и realm, а затем вторым запросом передаём данные для аутентификации. Так делать не хочется, потому что на модеме каждый https-запрос занимает секунд 10. Можно ли сразу выполнить полезный запрос, если realm заранее известен?
3) Включить имя и пароль в сам protobuf. Концептуально не очень нравится.
Зависит от прямоты рук того кто писал сервер
если еще интересно. 1. параметры в URL при POST запросе указывать можно. Но это показатель кривого дизайна системы сразу же. Так не делают из-за, хотя бы, понимания CQRS. 2. если используется отдельный готовый закрытый сервер авторизации (судя по авторизации get'ом и терминологии realm'ов) - в один запрос уместить никак не получится, если самописное - делается легко. как вариант можно, чтобы устройство проверяло активна ли сессия перед отправкой у себя - если сервер при авторизации выдал ей expiration claim. Таким образом большинство запросов не будет дублироваться. Если система самописная - проще всего сделать новую ручку на сервере и не париться. Вообще новый микросервис поднять будет проще, чем в модеме ковыряться. 3. нет нужды. можно пометить запрос multipart/form-data; и в другие поля заполнять какую угодно инфу, хоть и пароль. Вообще имя и пароль, а лучше токен, полученный заранее, вписывается обычно в хедер http запроса и никакой проблемы нет
Это называется x-csrf токен
Концептуально шейте jwt в head у вас все равно binary формат
Обсуждают сегодня