Asp.net mvc MVC3:一个控制器可以要求Windows身份验证,而另一个控制器允许匿名身份验证吗?
我有一个控制器,用于在需要通过windows身份验证的内部web应用程序中呈现页面。存在第二个控制器,用于系统中基于JSON的查询,不需要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
有什么建议吗 是的,你可以用 因此,例如,在一个简单的帐户控制器中,您只希望授权用户访问操作
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()