Внедрение пользовательского поставщика членства с немного странными требованиями
-
06-09-2019 - |
Вопрос
Создание новой мобильной веб-платформы, позволяющей мобильным пользователям приобретать и скачивать контент на свои телефоны.В прошлом мы использовали полностью индивидуальный механизм входа в систему, но я изучаю возможность использования пользовательского поставщика членства для следующей версии Платформы.
Дело в том, что у нас есть некоторые немного странные требования к механизму "входа", поэтому я не уверен на 100%, что MembershipProvider подходит лучше всего.
Просто ищу общий отзыв о приведенных ниже требованиях типа "Да, поставщик членства подходит" или "Нет, вы забиваете квадратный колышек в круглое отверстие".
Требования
Пользователю может потребоваться войти в систему с помощью "Номера мобильного телефона" (имя пользователя) и "PIN" (пароль) Это подходит довольно хорошо, поскольку они уже зарегистрировались и подтвердили с помощью SMS, и это удовлетворяет
ValidateUser(string username, string password)
Реализация методаПользователю может потребоваться войти в систему, используя только "Номер мобильного телефона".В этом случае мы не утруждаем себя проверкой личности на нашей стороне.Это сокращает количество шагов для пользователя, и проверка выполняется конкретным оператором, когда мы пытаемся выставить ему счет.(Операторы могут подтвердить, что введенный номер мобильного телефона совпадает с номером телефона, когда он попадает на сайт оплаты оператора)...таким образом, даже если у пользователей есть пароль, нам нужно было бы каким-то образом обмануть поставщика членства и впустить их с пустым паролем.
Пользователю вообще не нужно входить в систему.В этом случае мы можем прозрачно перенаправить пользователя на специальную веб-страницу сетевого оператора, и мы получим номер мобильного телефона в заголовках, когда он будет прозрачно отправлен нам обратно.В этом случае нам нужно было бы программно взять этот номер из заголовков, выполнить вход от их имени в исходном коде (опять же без какого-либо PIN-кода / пароля), и пользователь волшебным образом автоматически вошел бы в систему.
Требования 2 и 3 немного нечетны.По сути, у нас есть 3 различных механизма входа в систему, которые должен удовлетворять один поставщик членства.
- Пользователь Ввел мобильный телефон и Пользователь Ввел PIN-код
- Пользователь ввел только мобильный (код, который, я полагаю, соответствует требованию PIN-кода)
- Полностью прозрачный вход в систему (код для выполнения всего процесса входа в систему)
У кого-нибудь есть какие-либо комментарии / отклики на вышесказанное или есть какие-либо советы по любой странной реализации поставщика членства, которую вы делали в прошлом.
Решение
Я думаю, это могло бы сработать.Мы делаем # 3 на одном из наших сайтов.Вот фрагмент кода, который мы используем, чтобы позаботиться об этом.Чтобы использовать это, создайте страницу входа (transparentlogin.aspx или что-то подобное), убедитесь, что файл web.config разрешает анонимный доступ к этой странице, и поместите подобный код в функцию page_load для страницы transparentlogin.aspx:
const string specialpassword = "ThisIsOurSpecialPasswordForBehindTheScenesLogin";
if (MobileNumberFoundInHeader())
{
string username = GetMobileNumberFromHeaders();
// Authenticate the user behind the scenes
System.Web.Security.FormsAuthentication.SetAuthCookie(username, false);
System.Web.Security.FormsAuthentication.Authenticate(username, specialpassword);
}
else
{
throw new Exception ("Mobile Number Missing");
}
Затем в функции ValidateUser в MembershipProvider убедитесь, что вы выполнили проверку следующим образом:
public override bool ValidateUser(string username, string password)
{
const string specialpassword = "ThisIsOurSpecialPasswordForBehindTheScenesLogin";
bool ValidationSuccess = false;
// If the password being passed in is the right secret key (same
// for all users), then we will say that the password matches the
// username, thus allowing the user to login
if (password == specialpassword)
{
ValidationSuccess = true;
}
if (DoStandardUsernamePasswordVerification() == true)
{
ValidationSuccess = true;
}
return ValidationSuccess;
}
Что касается требования № 2, я немного сбит с толку.Что именно такое оператор?Я думал, мы имеем дело с мобильным телефоном, использующим веб-браузер для перехода на веб-сайт.Какое место в этом занимает оператор?Если решение, которое я предлагаю выше, не поможет, пожалуйста, отправьте ответ с более подробной информацией об Операторе.
Тим