2010-09-29 58 views
32

我花了一天半的時間嘗試解決此問題。 Bascially使用Framework 4.0在IIS7上使用Forms身份驗證的ASP.net網站。表單身份驗證忽略默認文檔

授權的東西似乎完美適用於每個場景,除了在沒有指定文檔的情況下擊中它(應解析爲默認文檔)。

例如(請不要苛刻的網站,它仍然是開發;)), http://www.rewardroster.com/Default.aspx完美的作品,這個網頁應該允許匿名訪問web.config中指定。

,但如果我打www.rewardroster.com直接將其與返回URL設置爲「/」或爲Login.aspx RETURNURL =%2F

有些事情我已經嘗試重定向到登錄頁面:

1)將身份驗證設置爲無,然後默認文檔工作,所以這不是問題。

2)添加DefaultDocument屬性處理web.config

3)刪除的所有條目中默認文檔列表中IIS除了Default.aspx的

4)在配置

新增的machineKey條目

5從綜合切換到經典管道在IIS

這裏)是什麼在我的配置:

<authentication mode="Forms"> 
    <forms name="appNameAuth" loginUrl="Login.aspx" protection="All" timeout="60" slidingExpiration="true" defaultUrl="Default.aspx" path="/"> 
    </forms> 
    </authentication> 
    </authentication> 

<location path="Default.aspx"> 

非常感謝您的時間和希望有人知道是怎麼回事。

+2

我有DONET V4相同的問題,有沒有人知道爲什麼會這樣突然開始發生時,它已經罰款年2.0版,V3和V3 0.5? – bigtv 2011-06-21 07:10:28

回答

36

這是我的解決方案:

Global.asax,方法:Application_BeginRequest,放置以下:

if (Request.AppRelativeCurrentExecutionFilePath == "~/") 
    HttpContext.Current.RewritePath("HomePage.aspx"); 

尼斯和簡單,你有機會建立邏輯如果您的網站使用基於配置變量的多個主頁,則圍繞您要使用的主頁。

Dmitry.Alk

+1

這工作就像一個魅力!非常感謝德米特里! – Andrey 2011-05-06 21:14:11

+4

很好的答案。但是讓它成爲「〜/ HomePage.aspx」。如果您的應用程序位於子文件夾(「http:// server/myapp /」)中,則向「http:// server/myapp」(不帶結尾斜線)的請求會導致此代碼崩潰。 – Alex 2012-03-11 07:36:18

+0

沒有爲我工作,仍然得到* Login.aspx?ReturnUrl =%2f *當擊中.com – MGOwen 2012-06-13 11:15:52

3

我有類似的問題。我沒有登錄時沒有樣式,www.site.nl \重定向到登錄頁面(帶有重定向網址到主頁)並進入www.site.nl \ Home(與上述重定向網址相同的主頁之前)不需要登錄。

的解決辦法是:

  • 打開IIS
  • 打開IIS:驗證
  • 打開並編輯匿名訪問
  • 檢查用戶(我改變了用戶對app.pool用戶)
  • 授予用戶對該網站根目錄的權利(在文件系統上)

這對我來說很成功。

好運

3

我最終什麼事做來解決,這是寫的幾行代碼在我的登錄頁面,以檢查「/」一個的Request.QueryString [「RETURNURL」。如果它發現,那麼它重定向到default.aspx。

我找不到任何方式使表單身份驗證不攔截未指定頁面的呼叫(例如www.mysite.com)。 。:(我甚至嘗試.NET 4 URL路由,但這並沒有阻止形式無論從劫持請求認證

下面是我在login.aspx的使用的代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!(IsPostBack || IsAsync)) 
    { 
     string returnUrl = Request.QueryString["ReturnUrl"]; 
     if (returnUrl != null) 
      if (returnUrl == "/") 
       Response.Redirect("default.aspx"); 
    } 
} 
+1

不漂亮,但它的作品 – WIRN 2013-09-06 09:12:07

+0

嘗試了一堆其他解決方案。這是我唯一的工作。 – 2017-11-01 21:48:34

0

我也有類似問題今天我試圖使用集成管道來保護nonasp.net資源(靜態文件,php等)

我有一個規則在我的根web.config有,然後我允許訪問根據具體情況逐一處理。

除了第在對「/」的請求永遠不會被認證(無休止地重定向到登錄頁面),而對「/Default.aspx」的請求很好。

我的問題是因爲爲所有資源類型啓用了Asp.Net UrlAuthentication模塊,顯然這對我的方案不起作用。相反,我必須將該模塊更改爲僅用於受管資源,並安裝IIS7的非託管URL身份驗證。然後我必須配置它(因爲它使用不同的身份驗證設置),並確保RoleManager爲非託管資源啓用(因爲我是在角色上進行身份驗證)。此URL可能會有所幫助:http://learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/

1

約翰的解決方案爲我工作,但只有在請求是爲站點根目錄。

我的網站被組織這樣的:。

  • WWW [mysite的網站] .com/login.aspx的
  • WWW [mysite的網站] .com/Default.aspx的
  • WWW [mysite的] .COM/[somestuff] /default.aspx
  • WWW。[mysite的網站] .com/[morestuff] /default.aspx

以下的Johan的好意見後,要求到www。[mysite的] .com上了指向表單登錄頁面,以及登錄後的默認頁面。但是,如果有人要求「/ [somestuff] /」,它仍然不起作用。

我通過在[somestuff]和[morestuff]目錄上啓用匿名身份驗證,然後在這些目錄中的單個文件上禁用它,從而實現了它的工作。這不是我想要支持的安全設置,因爲人們可以從default.aspx中獲取它們的位置,或者只需要[somestuff] /default.aspx開始。但現在我知道它爲什麼失敗了。看來你需要匿名訪問你想使用默認文檔的目錄。

8

我在嘗試點擊根路徑時看到了同樣的問題,並嘗試了前面提到的所有內容。這似乎Asp.net 4.0增加了兩個ExtensionlessUrl模塊的applicationHost.config爲IIS 7,您可以通過添加刪除這些模塊下面給你的web.config

<system.webServer> 
    <handlers> 
    <remove name="ExtensionlessUrl-Integrated-4.0"/> 
    <remove name=" ExtensionlessUrl-ISAPI-4.0_32bit "/> 
    </handlers> 
</system.webServer> 

其他信息

Microsoft KB

How extensionless urls are handled by asp net v4

+0

但是,如果我確實需要使用沒有擴展名的URL(例如:WCF服務),這將禁用它們,對吧? – MGOwen 2012-06-12 23:31:26

+5

這對我不起作用 – 2012-07-23 01:45:17

+1

奇怪的是,它起初並不適用於我 - 但後來當我通過IIS管理器(從「處理程序映射」部分)完成它的工作時,即使這看起來只是修改了網頁.config以同樣的方式。如果您在64位系統上運行,則需要刪除64位。 – 2013-10-02 23:00:36

0

我遇到同樣的問題,解決的是這樣的:

在格洛巴旁邊Dmitry.Alk解決方案l.asax我說:

if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/default.aspx") 
     HttpContext.Current.RewritePath("Default.aspx"); 
    if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/") 
     HttpContext.Current.RewritePath("Default.aspx"); 
    if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~") 
     HttpContext.Current.RewritePath("Default.aspx");