3

工作我使用下面的代码来访问基于用户身份验证角色的身份验证是不是在asp.net

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来执行授权,所以我在那里做错了什么。

+0

是它我还是你没有检查,看看用户是否有管理角色?做一个检查,然后根据角色重定向。 – Gage 2011-07-28 13:33:33

回答

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

+0

我很抱歉,不是这种情况,我也检查过,并且我总是最终去那个页面,即使访问权限被设置为 – 2011-05-25 21:12:51

+0

检查了什么?更新上面的配置代码片段,然后反映它是如何设置的,如果您的web.config位于/并且您要保护的页面位于/Members/ClientAccount.aspx,并且您有一条ClientAccount.aspx规则那实际上是/ClientAccount.aspx,它不存在。 – mikey 2011-05-25 23:14:20

+0

做你的网站。config有这个标签:检查这个链接,了解可以放入“authentication”标签的所有选项。 http://msdn.microsoft.com/en-us/library/ff647070.aspx – mikey 2011-05-25 23:15:49

0

嘿,您的意思是否有

< 否认角色=“会员” />

眼下,否认政策真的不需要列出的成员角色。如果你是想成员也被允许到该网页,你需要换出否认,允许:

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

嗯,我只想管理员能够访问页面ClientAccount.aspx,因此如上配置文件 – 2011-05-25 20:56:43

+0

嘿Mervin,你何时或在哪里分配管理员角色的formsAuthenticationTicket? – 2011-05-25 20:59:42

+0

@ N8,我会从数据库中为每个登录用户提供角色,现在我只是将它硬编码到成员来测试,看看重定向是否会工作,即使身份验证因网络中指定的权限而失败.config文件。不幸的是,重定向仍然发生 – 2011-05-25 21:01:44

相关问题