Каков наилучший способ обработки истек пароль в приложении ASP.NET MVC?ASP.NET MVC - Как обрабатывать истекший пароль?
Позвольте мне объяснить, - ASP.NET MVC, очевидно, установить (как в усеченный приложение на примере NerdDinner) для обработки следующих сценариев:
- Регистрация новых пользователей
- позволит им изменить свой пароль
- Вход с использованием действительного учетной записи/пароля
Что не является действительно хорошим способом сделать следующее:
- Force пользователю изменить свой пароль, если он истек
ASP.NET MVC способ мышления указывает на мысли о том, пользователь перейти к отдельному URL/целью выполнить изменение пароля ,
Проблема с этой идеей в том, что я не хочу, чтобы люди могли пойти на этот URL, если они не вошли в систему, и я не хочу, чтобы они были в состоянии пойти куда-нибудь еще на сайте с истекшим паролем.
В прошлом, когда я справлялся с этим, нужно, чтобы пользователь не покидал страницу входа и имел панель ASP.NET, показывающую бит «о, эй, вам нужно изменить пароль», и скрыть остальной части страницы. На этом этапе пользователь еще не вошел в систему, поэтому они не будут проходить проверку подлинности и не могут идти никуда, пока они не изменят свой пароль.
Но ASP.NET MVC затрудняет это. Если я делаю что-то вроде выше и имею все на странице входа в систему, то у меня должно быть очень громоздкое действие Login(), чтобы обрабатывать все возможные опубликованные значения. Если у меня есть сообщение для другого действия/представления, то я рискую либо войти в систему пользователя, либо не будет защищена паролем с изменением подлинности (поскольку, в отличие от бит «сменить пароль», который вам предоставляется, я не хотите, чтобы они были аутентифицированы, когда они видят страницу).
Я могу представить несколько сценариев, в которых вы бы установили что-то в ViewData, чтобы указать, что срок действия пароля истек, и настаивать на перенаправлении пользователя на страницу «Сменить пароль», но я не уверен, что это безопасная вещь. ,
Я думаю, что это не очень хорошая идея создать атрибут RequiresUnexpiredPassword, потому что вам придется применить этот атрибут ко всем контроллерам [Предполагая, что автор не хочет, чтобы пользователь просматривал приложение с истекшим паролем]. Лучше изменить поведение самого атрибута Authorize. – SolutionYogi
Не забудьте также украсить методы/контроллеры атрибутом Authorize. Как я уже сказал, вы можете либо расширить фильтр авторизации ИЛИ иметь отдельный атрибут. Отдельный атрибут будет соответствовать принципу единой ответственности, а также быть гибким. В этом случае, однако, я, вероятно, поеду с моим первым предложением, которое также является вашим предложением минус исключение, и используйте специальный фильтр авторизации. – tvanfosson
Да, но атрибут Authorize уже установлен, так что это спорный вопрос. – SolutionYogi