Asp.net mvc MVC3:一个控制器可以要求Windows身份验证,而另一个控制器允许匿名身份验证吗?

Asp.net mvc MVC3:一个控制器可以要求Windows身份验证,而另一个控制器允许匿名身份验证吗?,asp.net-mvc,asp.net-mvc-3,authentication,Asp.net Mvc,Asp.net Mvc 3,Authentication,我有一个控制器,用于在需要通过windows身份验证的内部web应用程序中呈现页面。存在第二个控制器,用于系统中基于JSON的查询,不需要Windows身份验证?可能吗?看来我现在只能做其中一个 有什么建议吗 是的,你可以用 因此,例如,在一个简单的帐户控制器中,您只希望授权用户访问操作ChangePassword [Authorize] public ActionResult ChangePassword() { // your code here

我有一个控制器,用于在需要通过windows身份验证的内部web应用程序中呈现页面。存在第二个控制器,用于系统中基于JSON的查询,不需要Windows身份验证?可能吗?看来我现在只能做其中一个


有什么建议吗

是的,你可以用

因此,例如,在一个简单的帐户控制器中,您只希望授权用户访问操作
ChangePassword

   [Authorize]
    public ActionResult ChangePassword()
    {
       // your code here
    }

对。根据您选择的身份验证,您可以使用

这篇文章正是您想要的:


例如,清单1中的主控制器公开了三个名为Index()、companyCrets()和stephensCrets()的操作。任何人都可以调用Index()操作。但是,只有Windows本地管理器组的成员才能调用companyCrets()操作。最后,只有名为Stephen的Windows域用户(在Redmond域中)可以调用StephenSecrets()操作。“

我们有一些应用程序需要执行此操作。通常,我们的应用程序被锁定在web.config中:

<authentication mode="Windows"/>
<authorization>
  <allow roles="DOMAIN\GroupNameHere"/>
  <deny users="?"/>
</authorization>
<location path="ApiControllerName">
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</location>
此PowerShell脚本将为您执行以下操作:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")

$applicationLocationPath = "Default Web Site/ApplicationName/ApiControllerName"

$oIIS = new-object Microsoft.Web.Administration.ServerManager
$oGlobalConfig = $oIIS.GetApplicationHostConfiguration()

$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/anonymousAuthentication", $applicationLocationPath)
$oSection.SetAttributeValue("enabled", "True")
$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/windowsAuthentication", $applicationLocationPath)
$oSection.SetAttributeValue("enabled", "False")

$oIIS.CommitChanges()

“只能执行一项或另一项”,您当时是如何执行的?您到底是如何启用windows身份验证的?IIS设置已启用windows身份验证,并且还允许匿名。Web.config已启用。我添加了[Authorize]属性为我需要保护的控制器,并将其从我想要暴露的控制器上删除。先生,您救了我的命!
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")

$applicationLocationPath = "Default Web Site/ApplicationName/ApiControllerName"

$oIIS = new-object Microsoft.Web.Administration.ServerManager
$oGlobalConfig = $oIIS.GetApplicationHostConfiguration()

$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/anonymousAuthentication", $applicationLocationPath)
$oSection.SetAttributeValue("enabled", "True")
$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/windowsAuthentication", $applicationLocationPath)
$oSection.SetAttributeValue("enabled", "False")

$oIIS.CommitChanges()