Я предоставляю набор API общедоступных веб-приложений для сторонних приложений (клиентов). Я хочу отслеживать, как эти клиенты используют мои API, поэтому мне нужно генерировать токены для этих клиентов. В то же время мне нужно аутентифицировать реальных пользователей, и разные пользователи могут видеть разные представления одних и тех же ресурсов. Я знаю, что OAuth2 может решить мою проблему, но это сложно. Я предпочитаю использовать HTTP + базовую аутентификацию как для пользователя, так и для приложения, поэтому я буду использовать разные свойства в заголовке HTTP для клиента и реального пользователя. Правильно ли это?
Могу ли я использовать базовую аутентификацию HTTP для аутентификации как приложений, так и пользователей в веб-API?
Ответ 1
Вообще говоря, Basic Authentication не выполняет эту работу, потому что для всех запросов требуются учетные данные (имя пользователя/пароль), и это не то, что вы хотите.
Во-первых, проанализируйте ваши требования:
- Вы хотите, чтобы конечный пользователь имел доступ к вашему сервису.
- Вы хотите, чтобы уполномоченное стороннее приложение могло получать доступ к другим данным конечных пользователей (при одобрении пользователей).
- Вы НЕ хотите, чтобы стороннее приложение получало учетные данные других конечных пользователей.
Итак, мы могли бы суммировать идеальный рабочий процесс как:
- Конечный пользователь запускает стороннее приложение и говорит: "Я хочу предоставить вам доступ к сервису"
- Стороннее приложение обращается к вашему сервисному API и говорит: "Я хочу получить доступ к этим пользовательским данным"
- В вашей службе отображается страница с предоставлением доступа и говорится: "Вы хотите предоставить этому приложению доступ к вашим приведенным ниже данным?" (Важно: эта служба предоставления доступа предоставляется вами, а не сторонним приложением).
- Конечный пользователь соглашается с этим и вводит имя пользователя/пароль (конечный пользователь должен идентифицировать эту страницу предоставления доступа от вас!) и предоставить
- Страница вашего доступа к ресурсам генерирует токен, а сторонняя сторона использует токен для доступа к вашим данным:
- Стороннее приложение отправляет запрос в вашу службу и говорит: "Это токен авторизации для конечного пользователя и, пожалуйста, дайте мне данные"
- Ваша служба проверила и стороннюю сторону, и токен конечного пользователя, и ответьте.
- Стороннее приложение может делать больше запросов, пока токен не истек.
Основываясь на вышеописанном рабочем процессе, конечный пользователь имеет только входное имя пользователя/пароль, поэтому Basic Authentication не выполняет ваши требования.
На самом деле, ваше требование - аутентификация на основе токенов (наверняка вам нужен механизм истечения срока действия токена): сторонняя сторона получает только токен авторизации конечных пользователей, а не учетные данные.
Для этого, без OAuth, вам нужно реализовать механизм генерации, проверки и истечения срока действия маркера.
И наверняка вы можете поместить эти жетоны в HTTP-заголовок или URL-адрес, который зависит от ваших предпочтений или философии дизайна.
Надеюсь на эту помощь!