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