Могу ли я использовать базовую аутентификацию HTTP для аутентификации как приложений, так и пользователей в веб-API?

Я предоставляю набор API общедоступных веб-приложений для сторонних приложений (клиентов). Я хочу отслеживать, как эти клиенты используют мои API, поэтому мне нужно генерировать токены для этих клиентов. В то же время мне нужно аутентифицировать реальных пользователей, и разные пользователи могут видеть разные представления одних и тех же ресурсов. Я знаю, что OAuth2 может решить мою проблему, но это сложно. Я предпочитаю использовать HTTP + базовую аутентификацию как для пользователя, так и для приложения, поэтому я буду использовать разные свойства в заголовке HTTP для клиента и реального пользователя. Правильно ли это?

Ответ 1

Вообще говоря, Basic Authentication не выполняет эту работу, потому что для всех запросов требуются учетные данные (имя пользователя/пароль), и это не то, что вы хотите.

Во-первых, проанализируйте ваши требования:

  • Вы хотите, чтобы конечный пользователь имел доступ к вашему сервису.
  • Вы хотите, чтобы уполномоченное стороннее приложение могло получать доступ к другим данным конечных пользователей (при одобрении пользователей).
  • Вы НЕ хотите, чтобы стороннее приложение получало учетные данные других конечных пользователей.

Итак, мы могли бы суммировать идеальный рабочий процесс как:

  • Конечный пользователь запускает стороннее приложение и говорит: "Я хочу предоставить вам доступ к сервису"
  • Стороннее приложение обращается к вашему сервисному API и говорит: "Я хочу получить доступ к этим пользовательским данным"
  • В вашей службе отображается страница с предоставлением доступа и говорится: "Вы хотите предоставить этому приложению доступ к вашим приведенным ниже данным?" (Важно: эта служба предоставления доступа предоставляется вами, а не сторонним приложением).
  • Конечный пользователь соглашается с этим и вводит имя пользователя/пароль (конечный пользователь должен идентифицировать эту страницу предоставления доступа от вас!) и предоставить
  • Страница вашего доступа к ресурсам генерирует токен, а сторонняя сторона использует токен для доступа к вашим данным:
  • Стороннее приложение отправляет запрос в вашу службу и говорит: "Это токен авторизации для конечного пользователя и, пожалуйста, дайте мне данные"
  • Ваша служба проверила и стороннюю сторону, и токен конечного пользователя, и ответьте.
  • Стороннее приложение может делать больше запросов, пока токен не истек.

Основываясь на вышеописанном рабочем процессе, конечный пользователь имеет только входное имя пользователя/пароль, поэтому Basic Authentication не выполняет ваши требования.

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

Для этого, без OAuth, вам нужно реализовать механизм генерации, проверки и истечения срока действия маркера.

И наверняка вы можете поместить эти жетоны в HTTP-заголовок или URL-адрес, который зависит от ваших предпочтений или философии дизайна.

Надеюсь на эту помощь!