Итак, я делаю приложение, в котором я хочу, чтобы пользователи могли добавлять, редактировать и оценивать контент, но я не хочу заставлять их регистрироваться. Вместо этого я планировал просто использовать их идентификатор устройства или токен устройства, чтобы идентифицировать их. Я планирую сделать версию для iPhone и Android, поэтому я ищу общее решение, но версия для iPhone имеет более высокий приоритет, поэтому решение для iPhone также будет приветствоваться.
Проблема в том, что я не хочу, чтобы любой мог использовать мой веб-сервис, отправляя фальшивый идентификатор устройства или идентификатор чужого устройства.
Как клиент может доказать серверу, что он предоставляет правильный идентификатор устройства?
Ответ 1 · рейтинг 5 · Seva Alekseyev
Теоретически вы не можете. Идентификатор устройства не является особо секретным, и в большинстве случаев его можно легко подделать. Что касается Android, то в этой ОС вообще нет надежного идентификатора устройства - см. подробности здесь: Есть ли уникальный идентификатор устройства Android?
Все, на что вы можете положиться, - это безопасность через неизвестность, надеясь, что никто не будет настолько решителен, чтобы реконструировать код и проанализировать протокол аутентификации. И не раскрывать код не вариант - ведь вы же распространяете приложение.
Тем не менее, одним из не особо безопасных методов аутентификации будет отправка идентификатора устройства и хэша идентификатора устройства, объединенного с секретом, жестко запрограммированным в строке кода клиента (общий секрет). Служба будет содержать копию секрета, пересчитывать хэш (используя предоставленный идентификатор устройства) и сопоставлять хэши. Не взломать анализом протокола, только раскопав код для секрета. Однако уязвим для повторных атак. Не стесняйтесь запутывать секрет в коде - т.е. грамм. скомбинируйте его вместе из частей, хранящихся в отдельных местах непосредственно перед использованием.
Для более надежного решения аутентифицируйте пользователей, а не устройства. Это зависит от ваших клиентов и характера бизнеса.