Как API должен использовать базовую аутентификацию http

17

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

Пример 1. Компания предлагает API, чтобы позволить третьим лицам проходить аутентификацию с помощью токена и секрета с использованием HTTP Basic.

Пример 2. API принимает имя пользователя и пароль через HTTP Basic для аутентификации конечного пользователя. Обычно они получают токен для будущих запросов.

Моя настройка: у меня будет JSON API, который я использую в качестве бэкенда для мобильного и веб-приложения. Как для мобильных, так и для веб-приложений представляется хорошей практикой отправлять токены и секретные данные, поэтому только эти два приложения могут получить доступ к API, блокирующему любое другое третье лицо.

Но мобильное и веб-приложение позволяют пользователям входить в систему и отправлять сообщения, просматривать свои данные и т. Д. Поэтому я бы хотел, чтобы они также входили через HTTP Basic при каждом запросе.

Использую ли я как-то комбинацию обоих этих методов или отправляю только учетные данные конечного пользователя (имя пользователя и токен) для каждого запроса? Если я отправляю только учетные данные конечного пользователя, могу ли я сохранить их в файле cookie на клиенте?

Пол Сайлинг
источник
Обратите внимание, что файлы cookie не являются частью протокола HTTP, а представляют собой обычную функцию браузера. Так что, если вы не развертываете для Интернета, забудьте о них.
Ям Маркович
Если куки не рекомендуется, как / где вы храните кредиты для передачи в API?
Пол Сайлинг
Cookie-файлы - это просто способ для пользователей браузера легко хранить токены сеансов. Если вы взаимодействуете с разработчиком, это не должно быть беспроблемным. Вы можете настроить общедоступную службу подключения, которая предоставляет «билеты», и разработчики могут хранить свои билеты в памяти или где угодно. Обратите внимание, что у меня нет практического опыта работы с веб-сервисами, и, вероятно, есть стандартные решения для такого рода вещей.
Ям Маркович
Что вы думаете по поводу моего вопроса об аутентификации конечного пользователя и аутентификации API. Я до сих пор не уверен в этом
Пол Сайлинг

Ответы:

7

Базовая аутентификация HTTP требует, чтобы имя пользователя и пароль отправлялись при каждом запросе ресурса. Имя пользователя: пароль передается в заголовке запроса «Авторизация» в кодировке base64 с префиксом «Basic». Если вся ваша http-связь зашифрована (через ssl), информация о заголовке авторизации не может быть легко использована злоумышленниками, поскольку маловероятно, что они смогут ее захватить.

Зашифрованного SSL http с базовой аутентификацией должно быть достаточно.

Натан Пиллинг
источник
2
Можете ли вы привести пример этого? Это то, что мне нужно, просто ОЧЕНЬ застрял прямо сейчас ...
Гандерс
0

Может ли OAuth / OpenID работать вместе с токеном / секретом?

Недавно я рассмотрел следующий сценарий:

  • Интерфейс веб-приложений
  • Базовый REST API
  • Приложения для мобильных устройств, доступ к REST API

В качестве простого теста я смог:

  • Аутентификация пользователей через веб-приложение с использованием OAuth
  • REST API авторизован через OAuth, в результате чего секрет генерируется и передается обратно клиенту
  • Мобильное устройство будет затем аутентифицироваться через OAuth, а затем будет авторизовано REST API через секрет

Это позволило бы приложению для мобильных устройств проходить проверку подлинности с теми же учетными данными, что и через веб-интерфейс (та же учетная запись), а также иметь возможность авторизовать доступ к API.

Брендан Грин
источник
1
Так что в вашем примере только пользователь проходит аутентификацию. Клиенты, в которых выполняются вызовы API (веб-приложение, мобильное приложение), не проверяют подлинность того, кем они являются. Теоретически, API является общедоступным, и любое приложение может опубликовать имя пользователя и пароль и, возможно, получить токен
Пол Сайлинг
Пользователь проходит аутентификацию через приложение, а приложение выполняет вызовы от имени пользователя. Процесс аутентификации получает токен, который затем передает приложение.
Брендан Грин