2013-06-06 66 views
1

我有一個使用表單身份驗證的asp.net網站。當我在Microsoft Word文檔的網站上提供一個安全頁面的鏈接時,即使我已經登錄到該網站,它也會設置一個返回URL。這意味着我被重定向到登錄頁面,然後指向未經授權的訪問頁面,即使我有權查看該頁面。當用戶已經登錄時,ASP.net在鏈接上形成認證設置returnURL

的web.config代碼:

<authentication mode="Forms"> 
    <forms protection="All" requireSSL="true" name="BSOAuthCookie" loginUrl="~/Login/Login.aspx" defaultUrl="~/secure/securepage.aspx" cookieless="UseCookies" timeout="30" /> 
</authentication> 

這是我的登錄頁面的頁面加載代碼我重定向到unauthorsied訪問頁:

 If Request.IsAuthenticated AndAlso Not String.IsNullOrEmpty(Request.QueryString("ReturnUrl")) Then 
      ' This is an unauthorized, authenticated request... 
      Response.Redirect("~/UnauthorisedAccess.aspx") 
     End If 

如果我把相同的鏈接放在電子郵件中,我點擊它看起來工作正常。

回答

1

使用requireSSL="true"您強制認證的cookie僅在安全頁面上可讀,任何不安全的頁面都不會通過認證。

將此斷言添加到您的代碼中,並在IsAuthenticated之前再次檢查您是否來自安全頁面。

Debug.Assert(HttpContext.Current.Request.IsSecureConnection 
                , "Must be on secure page"); 

還設置domain="sitename.com",用了www,迫使從兩個域和子域設置authendicated的cookie。

<authentication mode="Forms"> 
    <forms domain="sitename.com 
     protection="All" requireSSL="true" name="BSOAuthCookie" 
     loginUrl="~/Login/Login.aspx" defaultUrl="~/secure/securepage.aspx" 
      cookieless="UseCookies" timeout="30" /> 
</authentication> 
+0

我點擊的鏈接是安全頁面。所有的請求都是在用戶登錄後通過https發送的。同樣在登錄頁面的頁面加載方法中,我有這段代碼將http修改爲https。請參閱我上面的頁面加載方法。 – Azeem

+0

然後嘗試'域' - 並設置斷言來仔細檢查它。 – Aristos

+0

感謝Aristos!我已經嘗試了你的建議,但它仍然在做同樣的事情。 – Azeem

相關問題