Asp.net mvc 同时使用OWIN OAuth中间件和system.web授权

Asp.net mvc 同时使用OWIN OAuth中间件和system.web授权,asp.net-mvc,asp.net-web-api,oauth,owin,ntlm,Asp.net Mvc,Asp.net Web Api,Oauth,Owin,Ntlm,我有一个现有的MVC 5应用程序,它对控制器操作使用Active Directory和NTLM身份验证/授权。我通过在项目根web.config文件中使用类似于此的内容来实现这一点。正如我所期望的那样 <system.web> <compilation debug="true" targetFramework="4.5.1" /> <httpRuntime targetFramework="4.5.1" /> <authentication mode=

我有一个现有的MVC 5应用程序,它对控制器操作使用Active Directory和NTLM身份验证/授权。我通过在项目根web.config文件中使用类似于此的内容来实现这一点。正如我所期望的那样

<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />

<authentication mode="Windows" />
<authorization>
  <allow roles="MyDomain\MyAuthorizedGroup" />
  <allow users="*" />
</authorization>

<roleManager enabled="true" defaultProvider="AD">
  <providers>
    <clear />
    <add name="AD" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>
</roleManager>

现在,在同一个项目中,我正在用WebAPI编写一个RESTful服务。WebAPI端点将通过OAuth令牌和Owin中间件在代码中受到保护。特别是Microsoft.Owin.Security.OAuth提供的类。我已经重写了OAuthAuthorizationServerProvider类以公开令牌生成端点,并且我已经向我的WebAPI端点添加了[Authorization(Roles=“…”]属性以验证令牌中的角色。所有这些都可以工作,但仅当我禁用现有NTLM身份验证时

这是一个我还没有解决的问题。我需要为新的WebAPI端点支持OAuth,为现有的MVC5控制器操作支持NTLM,也为一些新的MVC5控制器操作支持OAuth,这些操作服务于将与WebAPI端点通信的网页

我已经将API控制器和MVC控制器分离到项目/磁盘上的单独文件夹中。下面是我尝试的内容(很抱歉,缺少实际的配置元素;出于某种原因,因此没有呈现它们)

  • 根web.config中的位置标记。在OAuth保护的控制器文件夹的两个位置标记中,以及我在上面粘贴的现有NTLM保护的控制器的auth部分中。在path属性中,我尝试使用两个相对URL(例如{controllerName}/{action}/{id})还有磁盘上的实际文件夹名称。有几个不同的错误,我现在记不起来了,但足以说明我无法让这个解决方案工作
  • 嵌套的web.config文件。在MVC文件夹中,我有一个包含所有身份验证/授权/角色管理器的web.config。然后,在根web.config中,我有一个带有authentication=“None”的system.web元素而且根本没有身份验证/授权/角色管理器元素。我的期望是,项目中的所有内容都不会通过IIS进行身份验证,因此将留给Owin中间件。然后,带有MVC控制器的文件夹中的子web.config将覆盖父web.config中的身份验证,但仅适用于MVC cont但是,这不起作用。NTLM身份验证应用于所有内容,而不仅仅是与之共享子文件夹的MVC控制器
  • 所以现在,我不知所措。有谁能给我一些指导来做这件事吗