Проверка подлинности ролей не работает в asp.net - PullRequest
3 голосов
/ 26 мая 2011

Я использую приведенный ниже код для доступа к базе страниц на основе аутентификации пользователя

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 для авторизации, поэтому я что-то там не так делаю.

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Дважды проверьте путь к вашему местоположению относительно 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>

http://msdn.microsoft.com/en-us/library/ff647070.aspx

0 голосов
/ 26 мая 2011

эй, ты хотел иметь

<<strong> deny role = "Member" />

прямо сейчас, политике deny действительно не нужнароль члена в списке.Если вы хотите, чтобы участник также был допущен на эту страницу, вам нужно будет поменять его, разрешив:

<authorization>
  <allow roles="Admin" />
  <allow roles="Member"/>
  <deny users="?" />
</authorization>
...