Я создаю приложение, которое будет размещено на сервере. Я хочу создать API для приложения, чтобы облегчить взаимодействие с любой платформой (веб-приложение, мобильное приложение). Я не понимаю, как мы аутентифицируем пользователя при использовании REST API.
Например, когда пользователь вошел в систему, а затем хочет создать тему форума. Как я узнаю, что пользователь уже вошел в систему?
Authorization
заголовок + например , заголовок браузера localStorage VSCookie
+ стандартное хранилище файлов cookie браузера.Ответы:
Вы можете использовать базовую HTTP-аутентификацию или дайджест-аутентификацию. Вы можете безопасно аутентифицировать пользователей, используя поверх него SSL, однако это немного замедляет работу API.
OAuth - лучшее, что можно получить. Преимущества oAuth - это токен с возможностью отзыва или истечения срока действия. См. Следующее о том, как реализовать: Рабочая ссылка из комментариев: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
источник
Например, когда у пользователя есть логин. Теперь допустим, что пользователь хочет создать тему форума. Как я узнаю, что пользователь уже вошел в систему?
Подумайте об этом - должно быть какое-то рукопожатие, которое сообщает вашему API «Создать форум», что этот текущий запрос исходит от аутентифицированного пользователя. Поскольку API-интерфейсы REST обычно не имеют состояния, состояние должно где-то сохраняться . Ваш клиент, использующий REST API, отвечает за поддержание этого состояния. Обычно это в форме некоторого токена, который передается с момента входа пользователя в систему. Если токен в порядке, ваш запрос верен.
Проверьте, как Amazon AWS выполняет аутентификацию. Это прекрасный пример «перекладывания денег» с одного API на другой.
* Я подумал добавить практический ответ на свой предыдущий ответ. Попробуйте Apache Shiro (или любую библиотеку аутентификации / авторизации). Итог, старайтесь избегать нестандартного кодирования. После того, как вы интегрировали свою любимую библиотеку (я использую Apache Shiro, кстати), вы можете сделать следующее:
/api/v1/login
иapi/v1/logout
JSESSIONID
), который отправляется обратно клиенту (веб, мобильный, что угодно)./api/v1/findUser
Вот и все. Надеюсь это поможет.
источник
Используйте HTTP Basic Auth для аутентификации клиентов, но обрабатывайте имя пользователя и пароль только как временный токен сеанса .
Токен сеанса - это просто заголовок, прикрепленный к каждому HTTP-запросу, например:
Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
строка Ym9ic2Vzc2lvbjE6czNjcmV0 выше - это просто строка «bobsession1: s3cret» (которая является именем пользователя / паролем), закодированная в Base64.
Чтобы получить временный токен сеанса, указанный выше, предоставьте функцию API (например:),
http://mycompany.com/apiv1/login
которая принимает в качестве входных данных имя главного пользователя и главный пароль, создает временное имя пользователя / пароль HTTP Basic Auth на стороне сервера и возвращает токен (например: Ym9ic2Vzc2lvbjE6czNjcmV0). Это имя пользователя / пароль должны быть временными, срок их действия должен истечь примерно через 20 минут.Для дополнительной безопасности убедитесь, что ваша служба REST обслуживается через HTTPS, чтобы информация не передавалась в виде открытого текста.
Если вы используете Java, библиотека Spring Security обеспечивает хорошую поддержку для реализации вышеуказанного метода.
источник
Я думаю, что лучше всего использовать OAuth2. Погуглите, и вы найдете много полезных сообщений, которые помогут вам его настроить.
Это упростит разработку клиентских приложений для вашего API из веб-приложения или мобильного приложения.
Надеюсь, это поможет тебе.
источник
Я использую аутентификацию JWT. Прекрасно работает в моем приложении.
Существует метод аутентификации, который потребует учетных данных пользователя. Этот метод проверяет учетные данные и в случае успеха возвращает токен доступа.
Этот токен должен быть отправлен любому другому методу в моем веб-API в заголовке запроса.
Это довольно легко реализовать и очень легко протестировать.
источник