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

时间:2015-09-03 15:08:16

标签: 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="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类以公开令牌生成端点,并且我已经将[Authorize(Roles =“...”]属性添加到我的WebAPI端点以验证令牌中的角色。所有这些都有效,但是只有在我禁用了现有的NTLM身份验证时才会这样做。

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

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

  1. 根web.config中的位置标记。在两个位置标签中,我有OAuth受保护控制器的文件夹,以及上面粘贴的auth部分,用于现有的NTLM受保护控制器。在path属性中,我尝试使用相对URL(例如{controllerName} / {action} / {id})以及磁盘上的实际文件夹名称。我现在不记得有几个不同的错误,但足以说我无法使这个解决方案起作用。
  2. 嵌套的web.config文件。在MVC文件夹中,我有一个web.config,其中包含所有身份验证/授权/角色管理器。然后,在根web.config中,我有一个system.web元素,其中authentication =“None”,根本没有身份验证/授权/角色管理器元素。我的期望是项目中的所有内容都不会通过IIS进行身份验证,因此可以留给Owin中间件。然后,具有MVC控制器的文件夹中的子web.config将覆盖父web.config中的auth,但仅限于MVC控制器。但这不起作用。 NTLM身份验证正在应用于所有内容,而不仅仅是与它共享子文件夹的MVC控制器。
  3. 所以现在,我很茫然。任何人都可以提供任何指导方式吗?

0 个答案:

没有答案