Я создаю дневник изображений в приложении Google для работы с приложениями с помощью python. Пользователи могут регистрировать и публиковать фотографии в своем дневнике.
Кроме того, я стараюсь как можно больше соответствовать архитектуре REST.
Схема аутентификации основана на этом для веб-приложения:
1. Укажите имя пользователя/пароль из внешнего интерфейса
2. Backend устанавливает cookie, если аутентификация прошла успешно
3. Остальные вызовы AJAX аутентифицируются с использованием этого файла cookie.
Есть ли способ соответствовать REST без использования файлов cookie?
Теперь я также создаю приложение для Android, в котором пользователи могут войти в систему и опубликовать/просмотреть их дневники. Мне нужно выставить данные из хранилища веб-приложений, поэтому я буду создавать веб-сервис для извлечения данных из хранилища данных.
Схема аутентификации для клиента android:
ВАРИАНТ a
1. Укажите имя пользователя/пароль через https в веб-службе
2. Веб-сервис возвращает уникальный токен авторизации (сохраняйте токен в таблице имени пользователя /pwd в хранилище данных)
3. Запросить последующие услуги, добавив этот токен в заголовок запроса запроса
4. Сервер отображает токен в таблицу имени пользователя /pwd и возвращает данные, если найден токен
5. Ток авторизации истекает через определенный промежуток времени
ВАРИАНТ b
1. Настройте секретный ключ на стороне клиента и сервера
2. Используйте "имя пользователя: хэш пароля и секретный ключ" в заголовке авторизации каждого запроса
3. сервер генерирует пароль, извлекая пароль из хэш-значения, используя тот же алгоритм хеширования; при успешном возврате данных
Кстати, я не хотел использовать базовую авторизацию из-за ее уязвимостей безопасности.
Что лучше?
Существуют ли другие значительно лучшие способы достижения того, что я пытаюсь сделать? Безопасность для меня довольно беспокоит. Я был бы признателен, если бы кто-нибудь понял это. Благодарю.
Я занимался некоторыми исследованиями в отношении того, что было бы лучшим решением. Я думаю, что двухногий оайт мог бы работать в моем случае, как предложил Леонм.
В этом случае сервер должен предоставить клиенту ключ/секрет клиента, который в моем случае жестко закодирован в приложении.
Теперь шаги будут следующими:
1. Создайте подпись с помощью oauth_parameters (consumer_key, signature_method, timestamp), URL запроса, параметров запроса и SECRET.
2. При подаче запроса укажите параметры подписи, oauth.
3. Сервер проверяет запрос, создавая подпись снова, за исключением того, что в этом случае он использует SECRET, который соответствует ключу
Я так думаю, я в значительной степени подтверждаю принципы REST. Сервер без учета статистики, как я сейчас понимаю.
Каковы плюсы и минусы при этом?