ASP.NET C # — Настройка безопасности на основе ролей с проверкой подлинности в формах

#c# #asp.net #forms-authentication

#c# #asp.net #формы-проверка подлинности

Вопрос:

Я унаследовал ASP.NET Приложение на C #, которое не работает полностью. Мне сказали использовать проверку подлинности в форме, чтобы предотвратить доступ неавторизованных пользователей к определенным подкаталогам.

У меня возникла проблема с пониманием проверки подлинности в формах. Это общедоступный интернет-сайт, и все пользователи будут иметь доступ к основной части сайта. Однако существует подкаталог, доступ к которому ограничен определенными пользователями. Я знаю, что пользователь действителен, потому что они введут имя пользователя и пароль, и я найду их в базе данных. Я добавил эти строки в файл web.config подкаталога.

 <configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
        <authorization>
      <allow roles="Administrators, Examiners"/>
            <deny users="*"/>
        </authorization>
    </system.web>
  

Вопрос в том, как мне установить в моем коде принадлежность пользователя к определенной роли.

Вот псевдокод.

Если имя пользователя и пароль совпадают, то

Задайте для этой роли пользователей значение Examiners.

Я не знаю код, который мне нужен, чтобы назначить пользователю роль.

Ответ №1:

Взгляните на свою базу данных участников.

Для начала рассмотрим метод входа в систему:

 protected void LoginButton_Click(object sender, EventArgs e)
{
 // Validate the user against the Membership framework user store
 if (Membership.ValidateUser(UserName.Text, Password.Text))
 {
 // Log the user into the site
 FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked);
 }
 // If we reach here, the user's credentials were invalid
 InvalidCredentialsMessage.Visible = true;
}
  

вы можете проверить учетные данные пользователя в методе аутентификации:

 protected void myLogin_Authenticate(object sender, AuthenticateEventArgs e)
{
 // Get the email address entered
 TextBox EmailTextBox = myLogin.FindControl("Email") as TextBox;
 string email = EmailTextBox.Text.Trim();

 // Verify that the username/password pair is valid
 if (Membership.ValidateUser(myLogin.UserName, myLogin.Password))
 {
 // Username/password are valid, check email
 MembershipUser usrInfo = Membership.GetUser(myLogin.UserName);
 if (usrInfo != null amp;amp; string.Compare(usrInfo.Email, email, true) == 0)
 {
 // Email matches, the credentials are valid
 e.Authenticated = true;
 }
 else
 {
 // Email address is invalid...
 e.Authenticated = false;
 }
 }
 else
 {
 // Username/password are not valid...
 e.Authenticated = false;
 }
}
  

Для перенаправления в зависимости от конкретной роли используйте этот код:

 protected void Login1_LoggedIn(object sender, EventArgs e)
{
    if (Roles.IsUserInRole(Login1.UserName, "Admin"))
    {
         Response.Redirect("~/Admin/Default.aspx");
    }
    else if (Roles.IsUserInRole(Login1.UserName, "Examiner"))
    {
         Response.Redirect("~/Examiner/Default.aspx");
    }
    else
    {
         Response.Redirect("~/Login.aspx");
    }
}
  

Комментарии:

1. Это полезно. Я обнаружил, что мой предшественник уже создал нужные мне таблицы. Веб-конфигурация тоже настроена, но без кода. Я смог изменить web.config, чтобы он указывал на мою локальную базу данных. Затем вызов, который вы дали мне Membership.ValidateUser, сработал, когда я отправил ему пример пользователя и пароля. Проблема, с которой я сталкиваюсь, заключается в том, что пароли, которые у меня есть для моих пользователей, зашифрованы, поэтому я не могу узнать, что там было. Итак, мне нужен код для создания пользователя и присвоения ему пароля или изменения пароля существующего пользователя, чтобы я мог получить успешный вызов.

2. Я выясняю, что мне нужно. Хотя другие ответы также были полезными, я отмечаю ваш как лучший.

3. @Bob, я рад, что это помогло. Проверка паролей выполняется на стороне сервера, и вам не нужно беспокоиться об этом. Вы можете нажать кнопку «Проголосовать» за все полезные ответы, не принимая их ответы, чтобы отдать должное каждому.

Ответ №2:

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

Ответ №3:

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

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

Смотрите здесь для получения дополнительной информации о внедрении поставщика членства и здесь для получения аналогичной информации о внедрении поставщика ролей.

Ответ №4:

перейдите по ссылке, приведенной ниже

[http://www.asp.net/web-forms/tutorials/security ]

Комментарии:

1. Ваша ссылка не работает