Аутентификация для пользователей в одностраничном приложении?

Я разработал одностраничный прототип приложения, который использует Backbone во внешнем интерфейсе и собирается использовать данные из тонкого RESTful API на сервере.

Исходя из интенсивной разработки приложений на стороне сервера (php и python), мне действительно понравился новый подход к проектированию с толстой клиентской стороной MVC, но я не уверен, как лучше ограничить приложение аутентифицированными пользователями, которые входят в систему.

Я предпочитаю, чтобы само приложение находилось за входом в систему, а также, в конечном счете, я хотел бы реализовать другие типы входов в систему (openid, fb connect и т. Д.) В дополнение к собственному входу на сайт. Мне неясно, как это делается и что я искал, но мне не удалось найти информацию, которая мне это ясно дала.

В целом, какова в настоящее время лучшая практика для регистрации пользователей и требования их входа в систему для использования вашего одностраничного приложения?

Как пользователь вошел в систему, как аутентифицируются запросы API? Могу ли я сохранить сеанс, но как мне обнаружить этот сеанс в вызовах API или есть ли токен, который я должен передавать при каждом вызове API? Любые ответы на это будут высоко оценены!

3 ответа

Самый RESTful способ, который я видел, основан на потоке учетных данных клиента OAuth, в основном на конечной точке / токен, где вы публикуете имя пользователя / пароль, в который возвращается токен доступа для этого сеанса. Каждый запрос ajax после этого добавляет Authorization заголовок на предъявителя с токеном. Вы можете хранить токен в глобальной переменной, чтобы хранить его до тех пор, пока страница не будет обновлена ​​/ закрыта, использовать локальное хранилище для входа пользователей в систему между сеансами или файлы cookie javascript. Если вам не нравится идея токенов, тогда вы можете просто использовать старый подход к cookie-файлам, который в любом случае автоматически отправляется с любым ajax-запросом.

Что касается facebook / google и т. Д., Я обычно придерживаюсь подхода stackru, когда я связываю внешние логины пользователей с учетной записью. Затем используйте довольно обычный серверный танец oauth (хотя вы можете заменить все запросы к серверу ajax-запросами с небольшими изменениями, я просто обнаружил, что это не имеет большого значения, так как вам все равно нужны перенаправления между вами и сервером). Я обычно выдаю зашифрованный cookie для входа в Facebook, который затем конвертирую в токен, используя метод, аналогичный описанному выше (просто отправьте cookie с запросом вместо имени пользователя / пароля).

Мы используем аутентификацию на основе файлов cookie django и имеем отдельную страницу для входа в систему и одностраничного приложения. Работает довольно хорошо для нашего варианта использования. Мы использовали систему управления сеансами на основе Backbone, которую я описал здесь: backbone.js - обработка, если пользователь вошел в систему или нет

Мы используем Angular.js и у нас есть отдельная страница для входа в систему. На отдельной странице загружается отдельное одностраничное (и защищенное) приложение, которое вызывает сервер с помощью http XHR-запроса, отправляя имя пользователя и пароль. Если сервер аутентифицировал учетные данные, код JavaScript устанавливает cookie. этот файл cookie может быть прочитан с "другой стороны", то есть незащищенного приложения. В куки мы только вводим имя пользователя и, конечно же, ни пароль, ни другую защищенную информацию. тогда мы можем показать что-то вроде "Не Лиор? Выйти из системы в незащищенном приложении.

Единственное, что нужно отметить, это переопределить механизм cookie Angular, чтобы установить неопределенный срок действия и, самое главное, корневой путь:

$document[0].cookie = 'username=' + escape($scope.userName) + ";expires=Thu, 01 Jan 2970 00:00:00 GMT; Path=/";
Другие вопросы по тегам