12

Я работаю на службы REST, который имеет несколько требований:REST просит Выполняется авторизация

  1. Он должен быть безопасным.
  2. Пользователи не могут подделывать запросы.

Мое текущее предложенное решение иметь пользовательский заголовок Authorization, которые выглядят так (это так же, как амазонка работа веб-сервисы):

Authorization: MYAPI username:signature 

Мой вопрос заключается в том, чтобы сформировать подпись , Когда пользователь регистрируется в службе, им предоставляется секретный ключ, который они могут использовать для подписи запросов. Это остановит других пользователей, отправляющих запросы от их имени, но не остановит их подделывание запросов.

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

Любые советы были бы очень благодарны, я бы очень хотел, чтобы это правильно в первый раз.

+0

Определите «запросы ковки». Какая организация создает не подделанные запросы? Это клиентское программное обеспечение? – Alexander

ответ

1

Я думаю, что самым простым способом сделать это было бы использование аутентификации клиента HTTPS. На этом сайте Apple есть thread.

Редактировать: для обработки авторизации я создавал бы отдельный ресурс (URI) на сервере для каждого пользователя и разрешал бы этому (аутентифицированному) пользователю управлять этим ресурсом.

Редактировать (2014): Apple изменила свое программное обеспечение на форуме за последние шесть лет; нить сейчас находится в https://discussions.apple.com/thread/1643618

+0

Как это мешает пользователям создавать запросы? – jonnii

+0

Для аутентификации клиента HTTPS клиент должен иметь действительный сертификат открытого ключа. Если вы не подразумеваете под «подделкой запросов», что аутентифицированный пользователь каким-то образом делает несанкционированные запросы, что является проблемой авторизации, а не проблемой аутентификации. –

+0

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

2

Что не так с HTTP Digest Authentication?

+0

Во-первых, мне придется использовать SSL для запросов (это нормально), но это не мешает пользователю войти в API с устройства, отличного от iPhone, и отправлять поддельные запросы. – jonnii

+0

Как они могут подделать запрос посредством аутентификации дайджеста? Как они получили текущее значение nonce и создали приемлемый ответ дайджест? –

+0

Они могут подделать запрос, потому что они могут создать стороннее клиентское приложение, которое входит в систему api, и в этот момент они могут отправлять свои собственные запросы. Мне нужно проверить источник запроса api. – jonnii

8

Ответ прост: это не может быть сделано. Как только вы отправляете какое-либо решение конечному пользователю, он или она могут атаковать сервер, с которым он общается. Самая распространенная версия этой проблемы - обманывать списки привет-очков во флеш-играх. Вы можете сделать это сложнее, введя какое-то шифрование в клиенте и запутывая код ... Но все скомпилированные и обфусканные коды могут быть декомпилированы и без искажений. Это всего лишь вопрос, сколько времени и денег вы готовы потратить, а также для потенциального злоумышленника.

Так что ваша забота - , а не, как пытаться помешать пользователю отправлять ошибочные данные в вашу систему. Как предотвратить пользователя от , причиняя вред вашей системе. Вы должны проектировать свои интерфейсы так, чтобы весь ущерб, нанесенный ошибочными данными, влиял только на пользователя, отправляющего его.

+0

В этом случае мы собираемся установить на iphone, поэтому есть риск, что кто-то декомпилирует код. Вы поднимаете очень важные моменты в своем сообщении о том, что можете ограничить возможность повреждения только данных пользователей, в этом случае они смогут обманывать игру, поэтому мы должны иметь возможность идентифицировать мошенников и эффективно работать с ними. Нелегкая задача. – jonnii

+0

Единственный способ обеспечить безопасность игры - запустить ее полностью на сервере и только отправлять действия пользователей по кабелю. То, что я обычно делаю, это: 1. Сделать сложный обман 2. Сохраните как можно больше информации. Обман обычно достаточно прост, чтобы вы могли удалить все записи для этого пользователя. –

+0

Если вы разрабатываете GAME, и это проблема CHEATING, у вас есть целый ряд доступных вам инструментов - в зависимости от того, является ли это игрой навыка или азартной игры. Вообще говоря, производительность игрока можно измерить статистически, и можно заметить странные шаблоны - вот сколько систем обнаружения мошенничества работает в индустрии развлечений. Еще одна вещь, которая мгновенно приходит в голову, - алгоритмический дизайн, который вводит в игру определенные измеримые свойства - например, накопление ошибок в числах с плавающей запятой. – mst

Смежные вопросы