2011-11-24 42 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

让您的验证节点保持原样。你仍然希望你的验证和以前一样工作。只需删除授权节点。 –