当用户已登录时,ASP.net在链接上形成身份验证设置returnURL

时间:2013-06-06 07:36:13

标签: asp.net forms-authentication returnurl

我有一个使用表单身份验证的asp.net网站。当我在Microsoft Word文档中提供指向网站上的安全页面的链接时,即使我已经登录到该网站,它也会设置返回URL。这意味着我被重定向到登录页面,然后指向我未经授权的访问页面,即使我有权查看该页面。

我的 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>

这是我的登录页面的页面加载中的代码,用于将我重定向到未经证实的访问页面:

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

如果我在电子邮件中添加相同的链接,我点击它似乎工作正常。

1 个答案:

答案 0 :(得分:1)

使用requireSSL="true"强制经过身份验证的Cookie只能在安全页面上读取,任何不安全的页面都不会通过身份验证。

在代码上和IsAuthenticated之前添加此断言,以便仔细检查您是否从安全页面调用。

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

同时设置domain="sitename.com",而不是www,以强制从域和子域设置认证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>