Реализация нестандартного поставщика членства с немного странными требованиями - PullRequest
2 голосов
/ 27 мая 2009

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

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

Просто ищите общий ответ на приведенные ниже требования: «Да, членство в организации подходит» или «Нет, вы бьете квадратным колышком в круглое отверстие»

Требования

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

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

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

Требование 2 и 3 нечетное. По сути, у нас есть 3 различных механизма входа, которые должен удовлетворить один поставщик членства.

  • Пользователь ввел мобильный и пользователь ввел PIN
  • Только для пользователя, введенного на мобильный телефон (код, который, как я полагаю, удовлетворяет требованию пин-кода)
  • Полностью прозрачный вход (код для выполнения всего процесса входа)

Кто-нибудь получил какие-либо комментарии / обратную связь по поводу вышеизложенного или получил какие-либо советы по поводу любого странного внедрения членского членства, которое вы делали в прошлом.

1 Ответ

1 голос
/ 06 июля 2009

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

Тим

...