Зачем делать страницу входа в одностраничное приложение отдельной страницей?

28

Мне интересно, почему кажется популярным, чтобы страница входа в SPA была отдельной страницей, которая не является страницей SPA (как в случае загрузки и отправки данных через запросы ajax)?

Единственное, о чем я могу думать, это о безопасности, но я не могу думать о конкретной причине безопасности. Я имею в виду, что единственное, что приходит на ум, - это то, что если ваша страница входа в систему является частью SPA, она отправляет имя пользователя / пароль через ajax, что можно увидеть с помощью таких инструментов, как firebug или веб-инспектор, однако, даже если вы отправляете его как обычный POST-запрос, есть другие инструменты, которые могут легко захватить эти данные (например, fiddler, httpscoop и т. Д.).

Есть ли что-то, что мне не хватает?

ryanzec
источник
2
Я не думаю, что в этом случае есть или должна быть причина. Я бы сказал, почему бы и нет?
Стивен Эверс
1
Мой аргумент против этого состоит в том, что наличие страницы входа в качестве отдельной html-страницы, в то время как остальная часть приложения представляет собой архитектуру SPA, кажется странным без реальной выгоды (хотя точка зрения, сделанная msanford, имеет свои достоинства).
ryanzec
@ryanzec Спасибо. Я добавил пример в попытке проиллюстрировать, что есть реальная выгода. Во-первых, экономия откладывания загрузки активов в другом месте не является незначительной, особенно в случае неудачного входа в систему (или приостановки учетной записи и т. Д.). Во-вторых, это гораздо быстрее реализовать, чем более сложную систему модулей, основанную на асинхронных зависимостях, и жизненный цикл разработки является важным фактором (см. Офисную мантру Opbeat * (содержит вульгарность)).
msanford
«даже если вы отправляете его как обычный запрос POST, существуют другие инструменты, которые могут легко получить эти данные». Конечно, ваша форма входа защищена HTTPS ?
Аджлан
@ajlane да, мой логин (и фактически все приложение) будет работать за HTTPS
ryanzec

Ответы:

18

Предположительно, это экономит загрузку множества клиентских ресурсов (таких как тяжелые фреймворки JavaScript, изображения и т. Д. ), Которые требуются только для приложения.

Существуют более сложные способы достижения аналогичной цели производительности (см. « Malte Ubl & John Hjelmstad: новый эффективный подход к загрузке JavaScript - JSConf EU 2012 »), но это довольно быстро для реализации и, вероятно, столь же эффективно, особенно если Ваше веб-приложение использует почти все ваши активы в любом случае.

Вы можете увидеть это в дикой природе на сайте, подобном бета-версии http://infogr.am :

  1. http://infogr.am/login/ загружаетфайлы jquery , rafahael , custom js и 3 css.
  2. http://infogr.am/beta/ (главная страница SPI для приложения) загружает 10 фреймворков JavaScript, 5 внешних CSS-файлов и около 60 изображений.
msanford
источник
Обновление: в 2016 году с Angular2 Front-End и JBoss мы по-прежнему делаем это по той же причине.
мсанфорд
18

Я думаю, что есть некоторые разумные аргументы за или против, и я бы сказал, что технология также играет роль в принятии решения.

Можно утверждать, что отдельная страница входа в систему позволяет использовать «Безопасность каталога». Обычно любой пользователь может видеть «страницу» входа в систему, но только пользователи, прошедшие проверку, могут просматривать «страницы» приложения и его «каталог». Маршруты также могут быть заблокированы, где / Account / отличается от / App /, и у каждого есть свой собственный «профиль безопасности».

Кроме того, если вы используете подход SPA и смешиваете аутентификацию с опытом работы приложений, логика может оказаться запутанной. Вместо того, чтобы предполагать, что пользователь «вошел в систему, потому что он здесь», вы должны постоянно проверять его статус аутентификации и спрашивать «должен ли этот пользователь быть здесь».

Кроме того, страница входа, как правило, находится на сайте, ориентированном на потребителя. Вы заходите на сайт www.yourapp.com, где есть информация об информации, контактах, поддержке и т. Д., А также страница входа в систему со страницы входа после аутентификацию, вы можете перенаправить на целый ряд целей ..

Причина, по которой я держу отдельную страницу входа в систему и почему у меня фактически совершенно другое приложение для моего сайта, ориентированного на потребителя, заключается в том, что я могу очень мало подвергать неаутентифицированному. Случайно какой-то придурок начинает стучать по моей странице входа в систему, я не хочу, чтобы это влияло на сторону приложения ... даже если вход в систему выполняет только простой аутентификационный поиск ... это как бы помогает мне не допустить, чтобы bozo'ы влияли на мой опыт пользователей .. В худшем случае мой потребительский сайт не работает, и никто не может войти, но, по крайней мере, зарегистрированные пользователи не будут знать, и их опыт не начнет замедляться .. Я не говорю, что это пуленепробиваемый выбор .. но по крайней мере я изолировал риск для неаутентифицированной области ..

hanzolo
источник
1
Безопасность часто является важной причиной.
JustinC
1
@JustinC: объясните мне на отдельной странице для входа в более безопасный?
ryanzec
Не обязательно с помощью атрибутов файловой системы (но это может быть, если этого требует ситуация), а с помощью контейнера / программного обеспечения / среды выполнения веб-приложения посредством применения методов выборочной аутентификации / авторизации, применяемых либо к конкретному ресурсу, либо к группе ресурсов. в целом (на практике это каталог): для страницы входа в систему и определенных статических ресурсов (изображений, таблиц стилей, страниц ошибок) часто достаточно анонимного доступа; для других страниц может потребоваться более конкретная аутентификация / авторизация.
JustinC
2
Аутентификация вне приложения изолирует аутентификацию от проблем приложения. Фактическая безопасность будет зависеть от реализации и технологии
Hanzolo
Обновление 2017: IdentityServer
hanzolo
10

Одна из причин этого заключается в том, что вы можете использовать обычные сеансы на основе файлов cookie. Пользователь входит в систему, в ответ отправляет cookie вместе с начальной главной страницей ..., а затем все последующие вызовы ajax отправляют cookie обратно на сервер.

GrandmasterB
источник
6

Я вижу несколько причин сделать это:

  1. Я могу использовать обычные правила контроля доступа на основе пути в web.xml.
  2. Я никогда не могу быть уверен, что правильно защитил все свое Ajax-приложение, и мне нужно делать обширные тесты, чтобы быть уверенным.
  3. Я могу делегировать аутентификацию фреймворку (например, Spring Security), стороннему приложению или решению SSO (например, CAS или JOSSO).
  4. Я могу разрешить браузеру кэшировать имя пользователя и (опционально) пароли для пользователя.
n0rm1e
источник