Аутентификация REST API на основе браузера - PullRequest
4 голосов
/ 21 октября 2010

Я работаю над веб-сервисом REST и, в частности, над методами аутентификации запросов на основе браузера. (с использованием JsonP или междоменных запросов XHR / XDomainRequest).

Я провел некоторые исследования в OAuth, а также в AWS Amazon. Большой недостаток обоих заключается в том, что мне нужно выполнить одно из следующих действий:

  • Хранить секретные токены в браузере
  • Пусть серверный скрипт обрабатывает подпись. По сути, я сначала запросил бы у моего сервера конкретный предварительно подписанный запрос javascript, который я буду использовать для подключения к реальному REST-серверу.

Какие есть еще варианты или предложения?

Ответы [ 3 ]

1 голос
/ 28 октября 2010

Ну, единственный верный ответ здесь - это прокси через сервер, используя сеансы / куки для аутентификации и, конечно, использования SSL.Извините за ответ на мой вопрос.

0 голосов
/ 28 октября 2010

Я сам не пробовал, но вы можете попробовать следующее .. (Я почти уверен, что получу некоторую обратную связь)

На стороне сервера создайте временную метку.Используя HMAC-SHA256, сгенерируйте ключ для этой метки времени, используя пароль, и отправьте сгенерированный ключ и метку времени в html.

Когда вы делаете вызов AJAX для веб-службы (при условии, что это другой сервер)) отправьте ключ и отметку времени вместе с запросом.Проверьте, находится ли временная метка в пределах 5-15 минут. Если это так, сделайте HMAC-SHA256 с тем же паролем и ключом, если сгенерированный ключ такой же.Также на стороне клиента вы должны будете проверить, является ли ваша временная метка еще действительной, прежде чем совершать вызов.

Вы можете сгенерировать ключ, используя следующий URL. http://buchananweb.co.uk/security01.aspx

0 голосов
/ 21 октября 2010

Да, jsonp call-аутентификация сложна, потому что браузер-клиент должен знать общий секрет.

Один из вариантов - сделать конечную точку анонимной (аутентификация не требуется). Это идет с другими целями безопасности (сервер открыт для атак, любой может его вызвать). Но вы можете справиться с этим, либо выставив очень ограниченный ресурс и / или используя ограничение скорости. С ограничением скорости одним клиентом разрешено только определенное количество звонков за определенный промежуток времени. Он работает путем идентификации клиента (например, по source-ips или другим клиентским следам).

Однажды я экспериментировал с одноразовыми токенами, но все они несколько провалились, потому что у вас есть проблема с получением самого токена и защитой нескольких извлечений токена с помощью ботов (что опять-таки требует ограничения скорости). 1005 *

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