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

相關問題