как ограничить посетителей конечной точкой API для тех, кто посещает мой сайт - PullRequest
0 голосов
/ 13 февраля 2012

Мой сайт не требует входа в систему.И действия, которые пользователь выполняет, заканчиваются вызовом ASP.NET MVC Controller Action Methods.В настоящее время любая другая компания может вызывать эти конечные точки и использовать мои API-интерфейсы таким образом.Я хочу убедиться, что только пользователи, которые находятся на моем сайте, могут получить доступ к этим API.

Как мне этого добиться?

Добавление пояснений:

Скажите, что мой сайт является консо.com.Я хочу, чтобы мои методы работали, только если конечный пользователь находится на consoto.com.Теперь, если другая компания или хакер создает сайт, скажем, hackland.com, и в своем javascript вызывает мои методы, я хочу, чтобы он потерпел неудачу, потому что их пользователи не на consoto.com, а вместо этого на hackLand.com.

МногиеВ наши дни сайты предлагают платный официальный доступ API к своим основным функциям.Если они не реализуют подобный механизм, другие будут иметь возможность вызывать методы, которые использует реальный сайт, вместо того, чтобы использовать платный API.Что помешало бы hackland.com просто использовать методы, используемые consoto.com, и в итоге не платить за услугу?

Ответы [ 3 ]

0 голосов
/ 13 февраля 2012

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

0 голосов
/ 14 февраля 2012

Один из способов сделать это - использовать какой-то токен, чувствительный ко времени, который клиент должен предоставить вашему контроллеру.

  1. Реализация веб-службы, которая принимает некоторые учетные данные от пользователя, и, если учетные данные действительны, возвращает чувствительный ко времени токен, который хэшируется на основе часов вашего сервера. Эта служба должна вызываться через SSL, чтобы учетные данные были защищены при передаче.

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

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

0 голосов
/ 13 февраля 2012

Я не на 100% уверен, что понимаю вас, но, похоже, вы хотите, чтобы только активные пользователи на вашем сайте могли вызывать определенные методы действий.Если это так, вы можете украсить методы действия с помощью [ChildActionOnly].Это заставит ASP разрешать только те действия, которые вызываются с HTML.Action() в коде представления.

код контроллера

[ChildActionOnly]
public ActionResult someAction()
{
    //return whatever you need
}

представление кода

Html.Action("someAction")

Это должнозапретить пользователям, которые активно не просматривают сайт, вызывать действия на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...