Как аутентифицировать собственное приложение в отношении веб-службы?

Мне нужно найти решение, чтобы убедиться, что мое приложение, которое будет распространяться как собственное приложение на мобильных устройствах, и ТОЛЬКО мое приложение может получить доступ к моей веб-службе, размещенной в другом месте. Другими словами, моя веб-служба должна принимать запрос только посредством законного использования моего приложения, а не каким-либо другим способом.

Решение, о котором я думал, заключается в следующем, скажите, пожалуйста, если вы считаете, что есть лучшее, или если это не подходит:

Встречная синхронизация одноразовых паролей (CS-OTP). Основная идея заключается в том, что каждая сторона (WS и приложение) имеет жестко закодированный секретный ключ и синхронизированный счетчик. Каждый раз, когда клиентское приложение отправляет запрос в WS, оно создает хэш с секретным ключом и значением счетчика. Внутренний WS делает то же самое и сравнивает хэши, если они идентичны, аутентификация проходит успешно, и обе стороны увеличивают свои счетчики, чтобы синхронизировать их. Поскольку счетчик увеличивается после каждой успешной попытки, хэш каждый раз будет другим (отсюда и название «Одноразовый пароль»).

Почему я думаю, что мне нужен одноразовый пароль? Потому что, если пароль или хэш остается идентичным, он может быть очень легко перехвачен пользователем клиентского приложения, который затем может сам подделать запрос без необходимости в приложении.

Расскажите, что вы думаете об этом решении.


person Mikaël Levy    schedule 10.12.2014    source источник


Ответы (2)


Много способов добиться этого, мой метод заключается в создании зашифрованного токена от клиента к серверу с использованием секретного ключа, как вы предлагаете. Я бы также включил в этот зашифрованный ключ некоторую информацию, которая поможет при проверке. Включите такие вещи, как IP-адрес, дату/время истечения срока действия, текущее время и т. д. Таким образом, кто-то, пытающийся воспроизвести трафик, должен будет приходить с того же IP-адреса в течение определенного периода времени и т. д. Вы можете варьировать в соответствии со своими потребностями. Надеюсь это поможет.

person Anthony    schedule 10.12.2014

Я считаю, что пока нативное приложение находится под контролем хакера, он может отладить ваше приложение и раскрыть ваш секрет. Неважно, в чем секрет. Если вы даете секрет, вы даете его человеку, а не приложению.

Вы можете дать уникальный секрет каждому экземпляру приложения, тогда вы можете заблокировать sb. кто ведет себя странно. Это дает вам некоторую аутентификацию.

Вы можете попытаться изменить код, чтобы затруднить взлом, но это только дополнительные расходы для хакера. Однако «только» может быть достаточно.

person Grzegorz Kazior    schedule 11.12.2014