#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:
Взгляните на свою базу данных участников.
- Вы можете создать свою собственную базу данных членства, создав схему членства в SQL Server здесь. Там вы найдете таблицу с именем aspnet_roles. В этой таблице вы можете определить различные роли.
- Есть также отличный учебник для помощи встроенного членство предоставить инструмент в Visual студии , чтобы сохранить ваш состав базы данных, вы должны смотреть на, а также.
Для начала рассмотрим метод входа в систему:
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:
перейдите по ссылке, приведенной ниже
Комментарии:
1. Ваша ссылка не работает