2011-11-24 87 views
3

我正在使用MVC 2.0與表單身份驗證。我想允許公衆訪問一個名爲「註銷」的控制器。目前每當我瀏覽它時,我都會彈出登錄頁面。如何允許匿名訪問只有一個控制器?

<authentication mode="Forms"> 
    <forms loginUrl="Login/Login" 
     protection="All" timeout="30" 
     name=".ASPXAUTH" 
     path="/" 
     requireSSL="false" 
     slidingExpiration="true" 
     defaultUrl="Token/Create" 
     cookieless="UseDeviceProfile" 
     enableCrossAppRedirects="false" /> 
</authentication> 

<!-- Deny Anonymous users. --> 
<authorization> 
    <deny users="?" /> 
</authorization> 


更新:我使用WIF和每個用戶到達註冊頁面時(匿名訪問),我需要簽署出來,以確保他們在他們的令牌的最新要求,並且不僅僅允許使用陳舊的標記。他們的索賠通過請求進入註冊頁面。

+1

咦?爲什麼非登錄用戶能夠註銷? – SLaks

+0

它聽起來有點奇怪,我知道!我正在使用w.i.f,並且每次用戶到達註冊頁面(匿名訪問)時,我都需要將它們簽名出來,以確保它們在令牌中具有最新的聲明,並且不僅允許使用陳舊的令牌。他們的索賠通過請求進入註冊頁面。 – Sean

回答

3

由於SLaks提到,應該不需要非登錄用戶訪問註銷操作。但是,如果要啓用到控制器/動作匿名訪問您必須啓用它在你的web.config:

<location path="~/Logout"> 
    <system.web> 
    <authorization> 
     <allow users="?" /> 
    </authorization> 
    </system.web> 
</location> 

一個純粹的MVC應用程序更好的方法是使用Authorize屬性,並能夠訪問所有web.config中的用戶。

+0

謝謝。我需要一個非登錄用戶訪問註銷的原因是因爲他們來自匿名訪問頁面,但需要註銷,以便我可以用新聲明創建它們的新安全令牌。說來話長!我會在哪裏放置位置標記? – Sean

+0

在你的web.config – Jan

+0

@Jan,不工作...它仍然重定向到登錄頁面。我正在使用federatedAuthentication(STS) –

2

您最好使用控制器和/或控制器操作上的屬性,而不是在config中指定授權。 [授權]僅限於已驗證用戶的操作,然後沒有該屬性的操作將公開。

+0

謝謝。所以請把放在web.config中? – Sean

+0

讓您的驗證節點保持原樣。你仍然希望你的驗證和以前一樣工作。只需刪除授權節點。 –