Шифрование пароля входа с помощью Active Directory

Мое приложение MVC5 использует Active Directory, и я не могу использовать шифрование пароля по умолчанию, предоставленное .Net, поскольку AD его не поддерживает.

Мой контроллер:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(Account user)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(user.UserName, user.Password))
        {
            var principal = user.GetUserPrincipal(user.UserName, user.Password, user.DomainName);
            if (principal != null)
            {
                FormsAuthentication.SetAuthCookie(user.UserName, user.RememberMe);
                var returnUrl = GetRedirectFromLoginUrl();
                if (Url.IsLocalUrl(returnUrl))
                    return Redirect(returnUrl);
                else
                    return RedirectToAction("Index", "Home");
            }
            else
                ModelState.AddModelError("", "User Principal not created.");
        }
        else
        {
            ModelState.AddModelError("", "Login data is incorrect!");
        }
    }
    else
        ModelState.AddModelError("", "Login data is incorrect!");

    return View("Login", user);
}

Логин работает нормально, но у меня проблема с безопасностью. Я вижу свое имя пользователя, пароль, домен и т. д. в виде открытого текста, когда собираю данные с помощью инструментов разработчика IE9 (экран ниже):

__RequestVerificationToken=S-DKCSoudfTYsoBh4fj...&UserName=test&Password=testpassword&DomainName=domainName

Захват сети показывает пароль в виде открытого текста

Web.Config имеет этот код:

<membership defaultProvider="ADMembership">
  <providers>
    <clear/>
    <add name="ADMembership" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConn" attributeMapUsername="sAMAccountName" />
  </providers>
</membership>

Помогите пожалуйста как зашифровать или скрыть пароль.


person sarojanand    schedule 10.03.2014    source источник
comment
Используете ли вы input[type=password] для пароля?   -  person Buboon    schedule 10.03.2014
comment
это приложение для интрасети, и я не могу использовать HTTPS.   -  person sarojanand    schedule 10.03.2014
comment
Я использую ‹input id=Password name=Password type=password /›   -  person sarojanand    schedule 10.03.2014
comment
@sarojanand Вам нужно использовать HTTPS, поэтому половина Интернета использует его для шифрования такого рода информации. Если это сайт интрасети, настроить https несложно, вы можете использовать самозаверяющий сертификат или сертификат, выданный ADCA.   -  person Ashigore    schedule 11.03.2014
comment
я пробовал с самоподписанным ключом, но это тоже не работает   -  person sarojanand    schedule 12.03.2014


Ответы (2)


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

Я не знаю, является ли это проблемой безопасности в IE или нет, но так оно и есть.

Шаги для просмотра вашего пароля:

  1. Откройте Gmail или Live.com в IE9 (я пробовал в IE9)
  2. F12 (открыть Инструменты разработчика) -> Перейти на вкладку «Сеть»
  3. Нажмите кнопку «Начать захват».
  4. Введите имя пользователя/пароль (вы можете ввести что угодно для проверки)
  5. нажмите «Остановить захват», а затем перейдите к подробному просмотру.
  6. в сетке щелкните строку POST и перейдите на вкладку «Тело запроса».
  7. см. код с паролем в виде обычного текста в конце _RequestVerificationToken......

Если кто-то найдет лучшее решение, пожалуйста, дайте мне знать.

person sarojanand    schedule 11.03.2014

Был ли дан ответ на этот вопрос? Я только что создал быстрое веб-приложение MVC4 с использованием VS2012. Установите для свойств проекта SSL Enabled значение true и запустите проект (установите корневой каталог решения на назначенный ssl:port). И да, вы МОЖЕТЕ ВИДЕТЬ пароль (и идентификатор пользователя) в виде обычного текста. Так что ничего общего с AD - это либо задумано, либо ошибка.

ТЕПЕРЬ ИНТЕРЕСНОЕ И СТРАШНОЕ — и StackOverflow, ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ.

Когда я делаю то же самое представление F12 для входа на ЭТОТ САЙТ, я также вижу свое имя пользователя и пароль ОБЫЧНЫМ ТЕКСТОМ!

Так что либо это «особенность» IE, либо, возможно, ошибка в VS и проблема для всех нас в StackOverflow.

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

person Llewellyn Preece    schedule 26.03.2014
comment
да, чтобы убедиться в этом, вам не нужно создавать какой-либо сайт. просто войдите на любой сайт, которому вы доверяете, например, Google, Microsoft в IE, и следуйте инструкциям, и вы увидите свой пароль в виде простого текста. - person sarojanand; 27.03.2014