Рекомендация по проверке подлинности API? - PullRequest
8 голосов
/ 20 августа 2010

Я разрабатываю несколько API-интерфейсов RESTful для вызова третьей стороной, и для этого API требуется аутентификация (на основе apikey & secret) и авторизация (на основе метода HTTP и URI).

Существует ли какое-либо существующее программное обеспечение, которое мы можемповторное использование, которое мешает мне развернуть нашу собственную реализацию для уровня безопасности?

Ответы [ 3 ]

7 голосов
/ 20 августа 2010

HTTP предоставляет вам поддержку для этого, поэтому вам не нужно заново изобретать колесо

Либо использовать:

  • HTTP Auth Basic (с SSL для обхода проблемы с отправкой простого текста)
  • HTTP Auth Digest

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

Мы используем HTTP Auth Digest (контейнер сервлета Tomcat имеет прямую поддержку для него), и мы довольны этим.

РЕДАКТИРОВАТЬ: Некоторые клиенты имеют проблемы с дайджестом (не так тривиально), поэтому в настоящее время я бы выбрал Basic и SSL. Преимущество для Basic также в том, что вы можете выполнять упреждающую аутентификацию (отправка пользователя: pwd в первом запросе).

2 голосов
/ 08 июня 2012

Если вы строите свой API-интерфейс с использованием Ruby on Rails (3.2.0 или выше), посмотрите гем restful_api_authentication - https://rubygems.org/gems/restful_api_authentication

0 голосов
/ 13 декабря 2013

Независимо от вашей технологии вы можете внедрить какую-либо систему, подобную AWS.

  • Каждый зарегистрированный пользователь должен иметь идентификатор пользователя и секретный ключ доступа.
  • Каждый запрос должен быть подписан с помощьюSAK и должен содержать идентификатор пользователя.(Учитывайте также метку времени).
  • Сервер, учитывая идентификатор пользователя, извлекает из БД SAK и снова подписывает запрос, если подпись продолжается, в противном случае возвращает ошибку.

Реализация не так уж сложна, но вам необходимо учитывать каждый запрос к серверу, который запрашивает хранилище для получения SAK.Один из вариантов - использовать NoSQL DB или аналогичный (например, Redis или memcache) для хранения идентификатора пользователя / sak.

...