2010-12-08 87 views
6

我試圖在使用.NET授權規則的IIS7中保護應用程序。IIS7授權規則/配置 - 永久提示

默認情況下,Web服務器允許所有用戶訪問(這是繼承的)。

我已經爲這個應用程序目錄添加了一個拒絕所有用戶命令,以及針對特定用戶的allow命令。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.web> 
     <authorization> 
      <allow users="myusername" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</configuration> 

我啓用了Windows身份驗證,並且我可以驗證沒有REMOTE_USER是MYDOMAIN \ myusername的行。

但是,當我嘗試拒絕所有用戶時,系統會提示使用典型的Windows域用戶名/密碼框。如果我輸入用戶名密碼,則提示會再次出現3次,直到最終顯示一條失敗消息。 (我也嘗試過無效)

尋找事件查看器,看起來好像我的用戶名和密碼登錄在審計中成功...並且爲了進一步說明,我的帳戶沒有被鎖定(如果我一次又一次無法登錄,那會是這樣)。所以就好像我正在登錄一樣,但配置沒有看到我輸入的內容與我的登錄名相匹配。

下面是我看到(甚至使用本地主機服務器連接時)消息:

**訪問被拒絕。

描述:訪問提供此請求所需的資源時發生錯誤。服務器可能未配置爲訪問所請求的URL。

錯誤消息401.2 .:未經授權:由於服務器配置而導致登錄失敗。驗證您是否有權根據您提供的憑據以及Web服務器上啓用的身份驗證方法來查看此目錄或頁面。額外的幫助,請與Web服務器的管理員。**

+0

此外,看起來這種方法是ASP.NET的IIS6方法。 IIS7授權有點不同。對於那個我有的規則,但這些似乎什麼都不做。我添加了一個,但它似乎並沒有否認任何東西。順便說一句,這是IIS 7.5。奇怪的是,.NET授權規則圖標在ASP.NET下,似乎遵循IIS6方法。也許IIS7授權沒有配置或安裝? – enforge 2010-12-08 16:04:11

+0

看來我的系統上沒有安裝IIS7 URL授權。相反,還有其他名稱與安裝的名稱相同,即IIS 6版本的工作方式不同。壞的,淘氣的微軟!如果這導致解決方案,我會更新一個完整的答案。 – enforge 2010-12-08 16:09:52

回答

7

首先,是IIS6授權也包括在IIS7的主要問題,並至少在我案件是默認的。首先,確保您已安裝IIS7授權。完整的方向可以在這裏找到:發生

http://www.iis.net/ConfigReference/system.webServer/security/authorization

的混亂,因爲IIS7中,有一個在您的應用程序菜單稱爲「.NET授權規則」(下ASP.NET段)的項目。這不是您想要的IIS7授權。爲此,您必須確保它已安裝(請參閱上面的鏈接),然後單擊您的應用程序的IIS部分下名爲「授權規則」的鏈接。

另一個值得一提的提示是,如果將以下配置到位:

<configuration> 
    <system.webServer> 
    <security> 
     <authorization> 
     <remove users="*" roles="" verbs="" /> 
     <add accessType="Deny" users="unknownname" /> 
     <add accessType="Allow" users="knownname" /> 
     </authorization> 
    </security> 
    </system.webServer> 
</configuration> 

這會導致每個人都被拒絕。看起來,如果您拒絕不存在的用戶名或角色,則每個人都被拒絕。如果被拒絕的用戶被識別,那麼它工作正常。

此外,爲*指定拒絕並允許某些用戶不起作用,它將拒絕所有用戶。你只需要移除*用戶(就像我上面的例子),然後只允許你的目標受衆。其他人都被默認拒絕。

0

你可以改變你的代碼如下

<deny users="*" /> 
<allow users="myusername" /> 
+0

這就是我原來的,但恐怕沒有區別。 – enforge 2010-12-08 16:00:03

0

我花了4個小時試圖設置(使用域角色:) :)。最終的解決方案是在角色中也使用域名:

`<system.web> 
    <authorization> 
    <allow roles="DOMAINNAME\rolename" /> 
    <deny users="*" /> 
    </authorization> 
</system.web>`