2011-10-18 26 views
12

我有一個控制器呈現內部Web應用程序中的頁面需要通過Windows身份驗證。有沒有第二個控制器用於基於JSON的查詢進入系統,不需要進行Windows身份驗證?那可能嗎?看來我目前只能做一個或另一個。MVC3:一個控制器是否需要Windows身份驗證,而第二個控制器允許匿名?

有什麼建議嗎?

+1

「只能夠做一個或另一個」你到底做了什麼? – bzlm

+0

你究竟如何啓用Windows身份驗證? – gideon

+0

IIS設置啓用了Windows身份驗證,並且還允許匿名。 Web.config具有。我將[Authorize]屬性添加到我需要保護的控制器,並將其從我想要公開的控制器中刪除。 – Shawn

回答

6

是一個簡單的賬戶控制器AuthorizeAttribute

因此,例如,處理這個問題。根據您選擇什麼樣的認證,你Authorize

本文給出確切裝點您的控制器的操作方法你在找什麼: http://www.asp.net/mvc/tutorials/authenticating-users-with-windows-authentication-cs

從文章「例如,家庭控制器列表中1公開了三個名爲Index(),CompanySecrets()和StephenSecrets()的動作,任何人都可以調用Index()動作,但只有Windows本地Managers組的成員纔可以調用CompanySecrets()動作。域名用戶Stephen(在Redmond域中)可以調用StephenSecrets()動作。「

0

是的,你可以在你只需要授權用戶訪問操作ChangePassword

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

我們有幾個應用程序需要做這件事。通常情況下,我們的應用程序被鎖定在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> 

但是,你還是要關閉Windows身份驗證該API控制器。

<location path="Default Web Site/ApplicationName/ApiControllerName"> 
    <system.webServer> 
     <security> 
      <authentication> 
       <anonymousAuthentication enabled="true" /> 
       <windowsAuthentication enabled="false" /> 
      </authentication> 
     </security> 
    </system.webServer> 
</location> 

這PowerShell腳本會爲你做它:您可以通過編輯IIS服務器上的applicationHost.config文件並添加爲此

[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

先生,你救了我的命! – 130nk3r5

相關問題