角色身份验证在asp.net中无效

时间:2011-05-25 20:48:01

标签: c# asp.net web-config forms-authentication 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,但我希望只有当他/她的角色设置为Admin时才会发生这种情况,如下面的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 个答案:

答案 0 :(得分:2)

仔细检查相对于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

答案 1 :(得分:0)

嘿那里,你的意思是

&lt; 拒绝 roles =“会员”/&gt;

现在,拒绝政策确实不需要列出成员角色。如果您希望成员也被允许进入该页面,您将需要换出拒绝,以允许:

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