Как повторно подтвердить подлинность пользователя в приложении ASP.Net MVC 3 _Intranet_? - PullRequest
6 голосов
/ 28 сентября 2011

Позвольте мне объяснить: приложение уже использует встроенную безопасность Windows, а не формы. Я пытаюсь выполнить так называемую «повышающую аутентификацию» или «принудительную повторную аутентификацию» для следующего сценария:

  1. пользователь просматривает сайт, делая обычные, тривиальные вещи
  2. внезапно, пользователь должен сделать чувствительное действие, такое как авторизация распределение ресурсов или подтверждение автокредита или что-то подобное
  3. пользователю предлагается ввести учетные данные, прежде чем он (а) будет перенаправлен на конфиденциальная страница, аналогично SharePoint "Войти как Другой пользователь "
  4. , если и только если введенные учетные данные так же, как и для текущего вошедшего в систему пользователя приложение переходит в чувствительную зону.

Это предотвратит следующие 2 проблемы:

  1. Пользователь идет на встречу или кофе и забывает заблокировать рабочая станция и коллега использует сеанс для доступа к конфиденциальной район
  2. Пользователь вводит учетные данные своего босса (потому что, давайте скажем, он заглянул через плечо босса), чтобы получить доступ к чувствительной области.

Я знаю, некоторые смотрели бы на это как на "параноик", но также некоторые говорили бы, что это здравый смысл и что-то должно быть встроено в фреймворк (jQuery или .NET)

Буду очень признателен за любой вклад. Спасибо!

Ответы [ 2 ]

4 голосов
/ 28 сентября 2011

Форма должна отправить учетные данные вместе с запросом на выполнение действия, т. Е. Некоторые действия требуют ввода имени пользователя / пароля.Используйте метод PrincipalContext ValidateCredentials , чтобы убедиться, что введены правильные учетные данные, и убедитесь, что введенное имя пользователя соответствует текущему имени пользователя в объекте User.Identity.

public ActionResult SensitiveAction( SensitiveModel model, string username, string password )
{
    using (var context = new PrincipalContext(ContextType.Domain))
    {
         if (!string.Equals(this.User.Identity.Name,username,StringComparison.OrdinalIgnoreCase)
             || !context.ValidateCredentials(username,password))
         {
              return View("PermissionDenied");
         }
    }

    ...
}
2 голосов
/ 29 сентября 2011

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

Пользователь вводит учетные данные своего босса (потому что, скажем, он заглянул за плечо босса), чтобы получить доступ к чувствительной области. Если кто-то знает и вводит учетные данные своего босса, вы ничего не можете сделать, чтобы обнаружить это.

...