针对不同区域的不同认证模式

时间:2012-12-05 23:13:39

标签: c# .net asp.net-mvc-3 web-config asp.net-mvc-3-areas

我正在处理一个网站的两个部分:一个使用普通表单身份验证,另一个使用基于HMAC的身份验证。基于表单的表单正常工作(除了使用自定义成员资格提供程序)。

最令人沮丧的是,默认情况下,如果决定使用表单身份验证,则会将所有401响应重定向到身份验证标记下的根Web.config中指定的loginUrl。为了让我的网站的HMAC部分关闭,我创建了一个单独的区域,这些控制器存在。但是,无论我在哪里放置<authentication mode="None"></authentication>标签(无论是在区域/视图Web中.config,一个Web.config我放在了区域文件夹中,或放在根Web.config中的位置标记下(这样做实际上会导致该标签不属于那里的错误))我似乎无法使这个东西停止重定向所有401到loginUrl。

任何帮助都会非常感激,因为这会让我把头发撕掉。

顺便说一句,至少2 times没有(可行的)回答,这个问题被提出了不同的方式。虽然我的重点是将身份验证模式设置为None,但他们通常专注于更改路径的角色(在我看来,每种方法的[Authorize(Roles="role1,role2,role3")]属性更容易),这使我的问题略有不同。如果这是不可能的,请告诉我,以便我能找到更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:9)

authentication Element (ASP.NET Settings Schema)仅在应用程序级别有效。 您不能在同一个应用程序中使用不同的身份验证模式。

但是,您可以为特定区域指定location Element (ASP.NET Settings Schema),并在其中指定允许匿名用户的authorization Element (ASP.NET Settings Schema)。您还可以将授权元素放在应用程序的子目录下的web.config文件中。

要使用两种不同的身份验证方案,您必须将该区域转换为单独的应用程序。如果您愿意,它仍然可以是父应用程序的子代,但有一些警告。当然,其中一个警告是两个应用程序之间不会共享会话状态。

另请参阅Nested ASP.NET 'application' within IIS inheriting parent config values?问题和ASP.NET Configuration File Hierarchy and Inheritance