Вот проблема:Вспомогательная функция для весенней безопасности
Мы должны реализовать двухэтапный процесс входа в систему. Первый шаг - пользователь вводит имя/пароль и проходит проверку подлинности. Второй шаг - пользователю может быть предоставлен вторичный экран выбора, где он выбирает опцию простым щелчком. Когда это будет сделано, пользователь, наконец, получит разрешение на определенный набор действий. Это завершает процесс аутентификации/авторизации для текущего сеанса пользователя.
Мы используем Spring Security в стандартной форме: первый экран входа в систему обрабатывается стеком безопасности по умолчанию по умолчанию и, как только пользователь находится в - Spring рассматривает процесс входа в систему.
Экран вторичного выбора полностью находится за пределами Spring Security, и все, что мы делаем при выборе пользователем, задает правильно настроенный объект обратно в контекст безопасности. Это работает для текущей сессии, как и ожидалось.
У нас также есть функциональность, которая реализована с помощью флажка с именем _spring_security_remember_me в первом экране входа в систему, а также переопределенный компонент UserDetailsService.
Помните, что я отлично работаю до тех пор, пока не будет выбора дополнительной опции выбора экрана. Поскольку вторичный экран не имеет ничего общего с Spring Security, механизм mem-me не будет активирован для вторичной опции, и все, на что он способен, это запомнить только первый шаг входа. Это приводит к тому, что нужно спросить у помнившего пользователя вариант, и нам поручено избежать этого.
Наличие и формы входа и вторичного выбора на той же странице не является вариантом.
Мы можем использовать дополнительный файл cookie, если требуется вторичный выбор, и на основе этого файла cookie «тихо» передают необходимый параметр при аутентификации. Но это означало бы, что мы должны делать кучу ручного материала, который Spring Security должна «предлагать», и это создает некоторые логики безопасности и токены за пределами безопасности Spring и функциональности «помнить меня».
Итак, вот вопрос для гуру безопасности: как «заставить» помнить-мне функциональность принять вторичный представленный параметр? Если бы фильтр Remember-Me мог «проверять» пройденный URL-адрес и определять, что опция помнить-меня выбрана, мы можем добавить этот параметр. Но это звучит не так, как возможно.
Возможно ли использовать еще одну форму для входа на вторичном экране и «тихо» передать только необходимые дополнительные параметры? Я знаю, что мы не будем включать имя пользователя/пароль в этом случае, по крайней мере, не в ясной форме. Опция звучит так, как будто это можно сделать, но я по-прежнему полагаю, что может быть более простой способ просто заставить Remember-Me делать то, что он делает. Или есть?
Спасибо, Николай
Спасибо за предложение, но оно выглядит более сложным, чем наш дизайн БД должен быть.Я реализовал это, введя имя пользователя и дополнительный параметр в самой учетной записи, так что RememberMe уже содержит все значения в одном токене - это была цель. Задача заключалась в том, чтобы определить «вторую» форму входа, чтобы фактически запустить встроенный логин. Эта вторая форма входа фактически имеет только скрытые параметры и управляется JavaScript (т. Е. Пользователь не понимает, что hi заносится в систему снова - он просто выбирает это дополнительное значение). – Nikolay
Я не понимаю, почему вам нужно будет считать субсессию второго экрана фактическим логином. «Вход в систему» устанавливает доверенный сеанс с аутентифицированным пользователем. Все остальное на самом деле является свойством сеанса пользователя, а не контекстом аутентификации. Не можете ли вы считать этот второй выбор простым значением конфигурации пользователя, которое сохраняется? Также я не могу следовать вашему предположению, что это усложнит ваш дизайн БД: это простая таблица с тремя столбцами: имя пользователя, ключ и значение. –