0

我的Register页面仅对经过身份验证的用户可用,因此任何输入的人http://localhost:52874/register.aspx都无法访问它。

但是我有一个从登录页面指向它的链接,当点击它时,DOES无需使用身份验证即可转到注册页面Server.Transfer("Register.aspx", false);

现在这是我喜欢的东西,这意味着它只能从 Login.aspx 页面获得,这很好。

但是,当我按下Submit注册页面上的按钮时(从 login.aspx 传输后),它会立即让我回到login.aspx没有任何处理的状态。

然后我必须添加:

  <location path="Register.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>

到 web 配置以允许它工作,这意味着它现在可以通过 url 访问。那么为什么会出现这种行为,为什么允许我使用Server.Tranfer但不让我处理按钮点击呢?

4

4 回答 4

1

如果您在执行 Server.Transfer 时查看浏览器地址栏,则 URL 不会更改 - 这是因为它会停止处理当前页面并开始处理新页面,而浏览器不会意识到这一点。因此,它会绕过身份验证,直到您回发即单击按钮,此时它会将您发送回登录。

您应该做的是一个 Response.Redirect 它将更改 URL 并且身份验证将正确进行。

于 2012-07-06T10:32:45.767 回答
0

这是因为 Server.Transfer 将当前请求的处理转移到不同的页面。这发生在检查您是否有权访问所请求的页面之后。即,当使用 Server.Transfer 时,请求是针对您有权访问的页面的,但是您通过将该页面的处理传递给您无权访问的页面来规避安全性。

查看Server.Transfer Vs。响应.重定向

于 2012-07-06T10:29:02.680 回答
0

http://www.4guysfromrolla.com/articles/120705-1.aspx - 查看这篇关于会员提供者的文章。它可能会有所帮助:)

如果您只允许用户在登录后访问该页面,您可能需要拒绝用户 =“?” 这将拒绝匿名用户访问该页面。

于 2012-07-06T10:29:17.047 回答
0

来自MSDN

ASP.NET 不会验证当前用户是否有权查看由 Transfer 方法传递的资源。尽管 ASP.NET 授权和身份验证逻辑在调用原始资源处理程序之前运行,但 ASP.NET 直接调用 Transfer 方法指示的处理程序,并且不会为新资源重新运行身份验证和授权逻辑。如果您的应用程序的安全策略要求客户端具有适当的授权来访问资源,则应用程序应强制重新授权或提供自定义访问控制机制。

因此,设计上Server.Transfer("Register.aspx", false);不会在您的场景中进行身份验证。

我认为任何人都应该能够看到注册页面——用户应该能够通过 URL 到达那里。因此,请确保未经身份验证的用户可以使用您概述的 web.config 文件更改注册页面。

于 2012-07-06T10:33:28.617 回答