我有一个现有的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 endpoints 将通过OAuth令牌和Owin中间件在代码中受到保护 . 具体来说,是Microsoft.Owin.Security.OAuth提供的类 . 我重写了OAuthAuthorizationServerProvider类以公开令牌生成 endpoints ,并且我已经将[Authorize(Roles =“...”]属性添加到我的WebAPI endpoints 以验证令牌中的角色 . 所有这些都有效,但是只有当我禁用现有的NTLM身份验证时 .

这是我还没有解决的问题 . 我需要支持新的WebAPI endpoints 的OAuth,现有MVC 5控制器操作的NTLM,以及一些新的MVC 5控制器操作的OAuth,这些操作是为将与WebAPI endpoints 通信的网页提供服务 .

我已将API控制器和MVC控制器分离到项目/磁盘上的单独文件夹中 . 有了这个,这就是我所尝试的(并且抱歉缺少实际的配置元素;由于某些原因,SO没有渲染它们) .

根web.config中的

  • 位置标记 . 在两个位置标记中,我尝试使用相对URL(例如 / / )以及磁盘上的实际文件夹名称 . 我现在还记不起几个不同的错误,但足以说我无法使这个解决方案起作用 .

  • 嵌套的web.config文件 . 在MVC文件夹中,我有一个web.config,其中包含所有身份验证/授权/角色管理器 . 然后,在根web.config中,我有一个带有authentication = "None"的system.web元素,根本没有身份验证/授权/角色管理器元素 . 我的期望是项目中的所有内容都不会通过IIS进行身份验证,因此可以留给Owin中间件 . 然后,具有MVC控制器的文件夹中的子web.config将覆盖父web.config中的auth,但仅限于MVC控制器 . 但这不起作用 . NTLM身份验证正在应用于所有内容,而不仅仅是它共享子文件夹的MVC控制器 .

所以现在,我很茫然 . 任何人都可以提供任何指导方式来做到这一点?