Если «безопасность - это проблема», то я бы сказал, что вам было бы намного лучше, если бы вы использовали открытые стандарты и библиотеку для достижения того, чего вы хотите.Основная причина этого заключается в том, что если вы делаете это сами, вы, скорее всего, что-то забудете;У этих стандартов было много глаз, смотрящих на них, ищущих дыры.
Ваши варианты включают (с повышением уровня сложности)
Базовая аутентификация и HTTPS
Все естьзашифрованный, что делает невозможным сжатие или просмотр, несколько увеличивает накладные расходы, потребляя больше ресурсов на сервере и, возможно, больше энергии аккумулятора на клиенте.Простота реализации, поскольку она хорошо поддерживается библиотеками.
Дайджест-аутентификация
Незашифрованные сообщения передаются по проводам, но аутентификация надежно управляется в заголовках авторизации.См. запись в википедии для получения дополнительной информации.
OAuth
Посмотрите, как Google предоставляет OAuth для установленных приложений.Я считаю, что это не то, что вы ищете, так как вы не просите обмениваться данными между приложениями, а просто аутентифицировать пользователей.
Сверните свои собственные
Если вы хотите свернуть своиЯ предлагаю посмотреть, например, как Google (сейчас устарел?) ClientLogin используется для работы.
- Клиенты получат защищенный ресурс и получат 401 с инструкциями для выполненияАутентификация GoogleLogin, включая URI для того, где выполнить саму регистрацию
- Клиенты (зная, как это сделать) POST запрос определенным образом на этот URI
- Сервер отвечает определенным ответомвключая (длинный) токен
- Теперь клиент может выполнять запросы GET к защищенному ресурсу с этим токеном.
Безгражданство
Вы цитируете REST, который требует, чтобызапросы не должны конкретно зависеть от предшествующего взаимодействия: «... каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для понимания запросаst, и не может использовать любой сохраненный контекст на сервере. "( fielding ) Это означает, что сервер не должен хранить разговорный контекст (например, токен аутентификации) в таблице.
Один из способов исправить это - использовать любой из подходов, основанных на токене.(где сервер сообщает клиенту о токене, который он должен использовать для будущих запросов), где токен - это не случайное число, а сообщение самому серверу.Чтобы защитить себя от вмешательства клиента, его можно подписать, а если вы боитесь, что клиенты смотрят на него, вы можете зашифровать его.
Редактировать: Хотя я не уверен,маловероятно, что у Google есть таблица всех выданных токенов аутентификации;Длина их токенов предполагает, что токен является неким зашифрованным сообщением, доказывающим, что тот, кто держит этот токен, действительно предоставлял реальные учетные данные в некоторой области в некоторый момент времени.