【问题标题】:Different authentication mode for different areas不同地区不同的认证方式
【发布时间】:2012-12-05 23:13:38
【问题描述】:

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

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

任何帮助将不胜感激,因为这让我把头发扯掉了。

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

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

    • 2013年12月的MVC5时代还是这样吗?
    • @Kjensen,是的,这是较新的 IIS 管道模型的固有限制。如果您必须从两个不同的来源进行身份验证,则可以使用表单身份验证并编写自定义 MembershipProvider。不支持同时启用表单和 Windows 身份验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2017-03-11
    • 2017-10-18
    • 2011-05-12
    相关资源
    最近更新 更多