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

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

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

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

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

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

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

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

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


person Bob Avallone    schedule 25.04.2011    source источник


Ответы (4)


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

  • Вы можете создать свою собственную базу данных участников, создав Схема членства в SQL Server здесь. Там вы найдете таблицу с именем aspnet_roles. В этой таблице вы можете определить различные роли.
  • Существует также отличное руководство по использованию встроенного инструмента предоставления членства в Visual Studio для поддержания вашего членства. базу данных, которую вы также должны изучить.

Чтобы начать здесь, вы используете метод входа в систему:

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 && 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");
    }
}
person Brian McCarthy    schedule 25.04.2011
comment
Это полезно. Я узнал, что мой Предшественник уже создал нужные мне таблицы. Веб-конфигурация тоже настроена, но без кода. Мне удалось изменить файл web.config, чтобы он указывал на мою локальную базу данных. Затем вызов, который вы мне дали Membership.ValidateUser, сработал, когда я передал ему образец пользователя и пароль. У меня проблема в том, что пароли, которые у меня есть для моих пользователей, зашифрованы, поэтому я не могу узнать, что там было. Поэтому мне нужен код для создания пользователя и предоставления ему пароля или изменения пароля существующего пользователя, чтобы я мог получить успешный вызов. - person Bob Avallone; 28.04.2011
comment
Я разбираюсь, что мне нужно. Хотя другие ответы также были полезными, я отмечаю ваш как лучший. - person Bob Avallone; 28.04.2011
comment
@ Боб, я рад, что это помогло. Проверка паролей выполняется на стороне сервера, и вам не нужно об этом беспокоиться. Вы можете нажать кнопку «Проголосовать за» для всех полезных ответов, не принимая их ответы, чтобы отдать каждому должное. - person Brian McCarthy; 28.04.2011

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

person suhair    schedule 25.04.2011

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

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

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

person Katie Kilian    schedule 25.04.2011

пройти по ссылке указанной ниже

[http://www.asp.net/web-forms/tutorials/security%5d

person Kanwar Singh    schedule 02.05.2014
comment
Ваша ссылка не работает - person Tony L.; 19.10.2016