我有一个使用表单身份验证的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
如果我在电子邮件中添加相同的链接,我点击它似乎工作正常。
答案 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>