Ключи API против HTTP-аутентификации против OAuth в RESTful API

Я работаю над созданием RESTful API для одного из приложений, которое я поддерживаю. В настоящее время мы стремимся встроить в него различные вещи, которые требуют более контролируемого доступа и безопасности. Исследуя способы защиты API, я нашел несколько разных мнений о том, какую форму использовать. Я видел, что некоторые ресурсы говорят, что HTTP-Auth - это путь, в то время как другие предпочитают ключи API, и даже другие (включая вопросы, которые я нашел здесь в SO) клянутся OAuth.

Затем, конечно, те, кто предпочитает, скажем, API-ключи, говорят, что OAuth предназначен для приложений, получающих доступ от имени пользователя (как я понимаю, например, для входа на сайт не из Facebook с использованием вашей учетной записи Facebook), а не для пользователя, который имеет прямой доступ к ресурсам на сайте, на который они специально подписались (например, к официальному клиенту Twitter, обращающемуся к серверам Twitter). Тем не менее, рекомендации для OAuth, кажется, даже для самых основных потребностей аутентификации.

Тогда мой вопрос - если предположить, что все сделано через HTTPS, каковы некоторые практические различия между этими тремя? Когда один следует рассматривать над другими?

1 ответ

Это зависит от ваших потребностей. Тебе нужно:

  • Идентичность - кто утверждает, что делает запрос API?
  • Аутентификация - они действительно те, кем они себя называют?
  • Авторизация - им разрешено делать то, что они пытаются сделать?

или все три?

Если вам просто нужно идентифицировать абонента, чтобы отслеживать громкость или количество вызовов API, используйте простой ключ API. Имейте в виду, что если пользователь, которому вы ввели ключ API, поделится им с кем-то другим, он также сможет вызывать ваш API.

Но, если вам также нужна авторизация, то есть вам нужно предоставить доступ только к определенным ресурсам на основе вызывающей стороны API, используйте oAuth.

Вот хорошее описание: http://www.srimax.com/index.php/do-you-need-api-keys-api-identity-vs-authorization/

Ключи API или даже токены попадают в категорию механизмов прямой аутентификации и авторизации, поскольку они предоставляют доступ к открытым ресурсам API REST. Такие прямые механизмы могут использоваться в случаях использования делегирования.

Чтобы получить доступ к ресурсу или набору ресурсов, предоставляемых конечными точками REST, необходимо проверить привилегии запрашивающей стороны в соответствии с их идентификацией. Затем первым шагом рабочего процесса является проверка личности путем аутентификации запроса; Последовательным шагом является проверка идентичности по набору определенных правил для авторизации уровня доступа (то есть чтение, запись или чтение / запись). Как только упомянутые шаги выполнены, типичной дополнительной проблемой является допустимая скорость запроса, означающая, сколько запросов в секунду запрашивающему разрешено выполнять к данному ресурсу (ресурсам).

OAuth (открытая авторизация) - это стандартный протокол для делегированного доступа, часто используемый крупными интернет-компаниями для предоставления доступа без предоставления пароля. Как ясно, OAuth - это протокол, который удовлетворяет вышеупомянутым задачам: Аутентификация и авторизация, предоставляя безопасный делегированный доступ к ресурсам сервера от имени владельца ресурса. Он основан на механизме токенов доступа, который позволяет сторонней организации получать доступ к ресурсу, управляемому сервером от имени владельца ресурса. Например, ServiceX хочет получить доступ к учетной записи Google Джона Смита от имени Джона, как только Джон санкционирует делегирование; Затем ServiceX будет выдан временный токен для доступа к деталям учетной записи Google, весьма вероятно, только для доступа для чтения.

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

Напомним, что в действительности нет реальной разницы между традиционными механизмами аутентификации и авторизации и версиями на основе ключей / токенов. Хотя парадигма немного отличается: вместо повторного использования учетных данных при каждом взаимодействии между клиентом и сервером используется вспомогательный ключ / токен, который делает общее взаимодействие более плавным и, вероятно, более безопасным (часто, следуя стандарту JWT, ключами и Жетоны имеют цифровую подпись на сервере, чтобы избежать крафта).

  • Прямая аутентификация и авторизация: протоколы на основе ключей как вариант традиционных версий на основе учетных данных.
  • Делегированная аутентификация и авторизация: как и протоколы на основе OAuth, которые, в свою очередь, используют токены, опять же как вариант версий на основе учетных данных (общая цель - не разглашать пароль какой-либо третьей стороне).

Обе категории используют традиционный рабочий процесс проверки личности для самого первого взаимодействия с сервером, которому принадлежат заинтересованные ресурсы.

Другие вопросы по тегам