我有一个控制器在内部Web应用程序中呈现需要进行Windows身份验证的页面。是否存在第二个控制器,用于基于JSON的查询到系统中,不需要进行Windows身份验证?那可能吗?看来我现在只能做一个或另一个。
有什么建议吗?
答案 0 :(得分:9)
我们有一些应用需要做这件事。通常,我们的应用程序被锁定在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>
但是,您仍然必须关闭该API控制器的Windows身份验证。您可以通过编辑IIS服务器上的applicationHost.config
文件并添加:
<location path="Default Web Site/ApplicationName/ApiControllerName">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true" />
<windowsAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</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()
答案 1 :(得分:6)
是。根据您选择的身份验证,您可以使用Authorize
来装饰控制器的操作方法本文准确介绍了您的需求: http://www.asp.net/mvc/tutorials/authenticating-users-with-windows-authentication-cs
从文章“例如,清单1中的Home控制器公开了三个名为Index(),CompanySecrets()和StephenSecrets()的动作。任何人都可以调用Index()动作。但是,只有成员Windows本地管理器组可以调用CompanySecrets()操作。最后,只有名为Stephen的Windows域用户(在Redmond域中)可以调用StephenSecrets()操作。“
答案 2 :(得分:0)
是的,您可以使用AuthorizeAttribute
处理此问题例如,在简单的帐户控制器中,您只希望授权用户访问操作ChangePassword
[Authorize]
public ActionResult ChangePassword()
{
// your code here
}