Цель: Мой сервер должен направлять не-пользователей на посадку/домашнюю страницу и регистрироваться в реальном приложении. Когда приложение будет загружено, оно сделает аутентифицированным HTTP-запросы к API RESTful (через Ajax).«Общая» аутентификация для веб-сайта и RESTful API
У меня есть API RESTful, который нуждается в аутентификации. На другом сервере у меня есть свой веб-сайт, для которого также требуется аутентификация, поэтому я могу определить, отображать ли вы посадку/домашнюю страницу для не-пользователей или приложение для зарегистрированных пользователей.
Первоначально я думал, что этого достаточно, чтобы реализовать HTTP Basic Auth для RESTful API. Однако, чтобы получить аутентификацию для моего веб-сайта, мне также необходимо настроить аутентификацию, что означало бы дублирование низкоуровневого кода для проверки учетных данных в базе данных как в REST API, так и на серверах веб-сайта.
В качестве альтернативы, я задавался вопросом, может ли веб-сайт аутентифицироваться через API RESTful. Например, в моем обработчике запросов для POST /login
я мог бы сделать запрос GET
к моему API, передав учетные данные пользователя из тела запроса. Если запрос возвращает 200 OK
, я могу подписать сеанс пользователя, тем самым подтвердив его. Оттуда и далее, запросы Ajax к REST API должны быть заверены с теми же учетными данными, так что я мог:
- установить кук, содержащих учетные данные, таким образом, позволяя JavaScript, чтобы получить учетные данные, прежде чем делать запрос (OK с SSL?)
- dump учетные данные в обслуживаемом HTML для веб-приложения, позволяя JavaScript получить учетные данные перед выполнением запроса (ОК с SSL?)
- прокси API через сервер веб-приложений, где Я могу получить учетные данные из сеанса и добавить их в заголовок
Authorization
прокси-запроса?
В качестве альтернативы, я полагаю, я мог бы просто поделиться сеансом между двумя серверами, хотя я слышал, что это плохая практика для дизайна RESTful.
Что было бы не так с этим? Есть ли лучший способ выполнить мою задачу?
Какую конечную точку я должен определить в своем API, к которому веб-приложение отправит запрос? Будет ли простой 'GET' что-то вроде'/auth' быть в порядке (определяя заголовок 'Authorization' в запросе)? –
Это было бы прекрасно - тогда вы можете вернуть 200, если аутентификация прошла успешно, а 401 - нет. У меня был аналогичный случай, но я сделал это без специального вызова auth, в основном со страницы входа. Я делаю вызов API для отдыха, чтобы получить пользователя с конкретным именем пользователя, передав имя пользователя и пароль в заголовке проверки подлинности - тогда, если вход в систему не выполнен Я возвращаю 401, если мне удастся выполнить вход в систему, я возвращаю 200 и пользовательский ресурс (который требуется приложению независимо - так что он сохраняет дополнительный вызов). –
Хорошо, отлично, спасибо! –