Внедрение пользовательского поставщика членства с немного странными требованиями

StackOverflow https://stackoverflow.com/questions/915141

Вопрос

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

Дело в том, что у нас есть некоторые немного странные требования к механизму "входа", поэтому я не уверен на 100%, что MembershipProvider подходит лучше всего.

Просто ищу общий отзыв о приведенных ниже требованиях типа "Да, поставщик членства подходит" или "Нет, вы забиваете квадратный колышек в круглое отверстие".

Требования

  1. Пользователю может потребоваться войти в систему с помощью "Номера мобильного телефона" (имя пользователя) и "PIN" (пароль) Это подходит довольно хорошо, поскольку они уже зарегистрировались и подтвердили с помощью SMS, и это удовлетворяет ValidateUser(string username, string password) Реализация метода

  2. Пользователю может потребоваться войти в систему, используя только "Номер мобильного телефона".В этом случае мы не утруждаем себя проверкой личности на нашей стороне.Это сокращает количество шагов для пользователя, и проверка выполняется конкретным оператором, когда мы пытаемся выставить ему счет.(Операторы могут подтвердить, что введенный номер мобильного телефона совпадает с номером телефона, когда он попадает на сайт оплаты оператора)...таким образом, даже если у пользователей есть пароль, нам нужно было бы каким-то образом обмануть поставщика членства и впустить их с пустым паролем.

  3. Пользователю вообще не нужно входить в систему.В этом случае мы можем прозрачно перенаправить пользователя на специальную веб-страницу сетевого оператора, и мы получим номер мобильного телефона в заголовках, когда он будет прозрачно отправлен нам обратно.В этом случае нам нужно было бы программно взять этот номер из заголовков, выполнить вход от их имени в исходном коде (опять же без какого-либо 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, я немного сбит с толку.Что именно такое оператор?Я думал, мы имеем дело с мобильным телефоном, использующим веб-браузер для перехода на веб-сайт.Какое место в этом занимает оператор?Если решение, которое я предлагаю выше, не поможет, пожалуйста, отправьте ответ с более подробной информацией об Операторе.

Тим

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top