#c# #asp.net #web-config #forms-authentication #formsauthenticationticket
#c# #asp.net #web-config #формы-проверка подлинности #билет для проверки подлинности формы #formsauthenticationticket
Вопрос:
Я использую приведенный ниже код для доступа к базе страниц на основе аутентификации пользователя
if (user.FirstOrDefault() == HashedPassword)
{
string roles = "Member";
// Create the authentication ticket
FormsAuthenticationTicket authTicket = new
FormsAuthenticationTicket(1, // version
loginName.Text, // user name
DateTime.Now, // creation
DateTime.Now.AddMinutes(60),// Expiration
false, // Persistent
roles); // User data
// Now encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
// Create a cookie and add the encrypted ticket to the
// cookie as data.
HttpCookie authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);
// Add the cookie to the outgoing cookies collection.
Response.Cookies.Add(authCookie);
Response.Redirect("/Members/ClientAccount.aspx");
}
else
{
Response.Redirect("signin.aspx");
}
}
Пользователь перенаправляется на ClientAccount.aspx, если данные для входа верны, но я хочу, чтобы это произошло, только если его / ее роль установлена как администратор, как показано в файле web.config ниже.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="members.aspx">
<system.web>
<authorization>
<allow roles="Member" />
<allow roles="Admin" />
<deny users="?" />
</authorization>
</system.web>
</location>
<location path="ClientAccount.aspx">
<system.web>
<authorization>
<allow roles="Admin" />
<deny roles="Member"/>
<deny users="?" />
</authorization>
</system.web>
</location>
</configuration>
Как мне сделать так , чтобы это произошло ?
Я предполагаю, что файл web.config не просматривает файл cookie для авторизации, поэтому я делаю там что-то не так.
Комментарии:
1. Мне кажется, или вы не проверяете, есть ли у пользователя роль администратора? Выполните проверку, а затем просто перенаправьте в зависимости от роли.
Ответ №1:
Дважды проверьте свой путь к местоположению относительно web.config, я предполагаю, что это проблема.
<location path="/Members/ClientAccount.aspx">
...
</location>
Конечно, вам нужно будет сделать что-то другое вместо этой строки, я бы предположил, что вы просто делали это для тестирования?
Response.Redirect("/Members/ClientAccount.aspx");
т. е. перенаправьте их на страницу, доступ к которой, как вы знаете, им запрещен. Я полагаю, вы собираетесь доработать эту часть, как только убедитесь, что она не разрешает участникам доступ к этой странице.
Вы должны убедиться, что ваш web.config имеет следующий тег:
<authentication mode="Forms" />
Вам нужно правильно ее настроить, есть много вариантов:
<authentication mode="Forms">
<forms loginUrl="Login.aspx"
protection="All"
timeout="30"
name=".ASPXAUTH"
path="/"
requireSSL="false"
slidingExpiration="true"
defaultUrl="default.aspx"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" />
</authentication>
Комментарии:
1. Извините, это не так, я это тоже проверил, и я всегда в конечном итоге захожу на эту страницу, даже если права доступа установлены как иное
2. Что проверил? Обновите приведенный выше фрагмент конфигурации, чтобы отразить, как он настроен на самом деле, если ваш web.config расположен по адресу /, а страница, которую вы пытаетесь защитить, расположена по адресу /Members /ClientAccount.aspx, и у вас есть правило для ClientAccount.aspx, которое на самом деле является /ClientAccount.aspx, которого не существует.
3. Есть ли в вашем web.config этот тег: <режим аутентификации =»Формы» /> Проверьте эту ссылку для всех параметров, которые вы можете указать в теге «аутентификация». msdn.microsoft.com/en-us/library/ff647070.aspx
4. Это также выглядит очень близко к тому, что вы пытаетесь сделать: codeproject.com/KB/web-security/formsroleauth.aspx
Ответ №2:
привет, ты хотел иметь
<запретить роли=»Участник»/>
прямо сейчас политике запрета действительно не нужна указанная роль участника. Если вы хотите, чтобы участник также был разрешен к этой странице, вам нужно будет заменить запрет, чтобы разрешить:
<authorization>
<allow roles="Admin" />
<allow roles="Member"/>
<deny users="?" />
</authorization>
Комментарии:
1. Ну, я хочу, чтобы только администраторы могли получить доступ к странице ClientAccount.aspx и, следовательно, к конфигурационному файлу, как указано выше
2. Эй, Мервин, когда или где ты назначаешь роль администратора FormsAuthenticationTicket?
3. @N8, я буду извлекать роли для каждого вошедшего в систему пользователя из базы данных, пока я просто жестко запрограммировал это для Member, чтобы протестировать и посмотреть, сработает ли перенаправление, даже если аутентификация завершится неудачей из-за разрешений, указанных в файле web.config . К сожалению, перенаправление все еще происходит