Windows表单身份验证-<deny users="?">重定向到外部页面!

3

如标题所述 - 我有一个类似以下的web.config文件,

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
         <forms name="login" protection="All" timeout="30" loginUrl="login" defaultUrl="~/">
              <credentials passwordFormat="Clear">
                   <user name="admin" password="password" /> 
              </credentials>
         </forms>
        </authentication>
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</configuration>

我希望能按照它所说的做...我想拒绝所有试图进入网站的用户。
它虽然起作用,但会重定向到一个我从未听说过的“Account/Login?ReturnUrl=%2flogin”网址...
有没有地方可以更改这个?

问题在于这个URL:“Account/Login?ReturnUrl=%2flogin”是从哪里生成的...它似乎是一个默认的东西...我没有一个名为Account的文件夹,也没有与Account/Login匹配的路由... - Erik5388
4个回答

2
我之前见过这个问题。毫无疑问你也收到了以下错误信息:

错误信息401.2:未授权:由于服务器配置,登录失败。请根据您提供的凭据和Web服务器上启用的认证方法验证您是否有权限查看此目录或页面。请联系Web服务器管理员以获得其他帮助。

你被重定向到“/Account/Login”,但该网页甚至不存在。我认为这是使用MVC组件所导致的某种默认设置,即使你正在使用ASP.NET Forms网站。也许你有一些Razor页面,并且在你的web.config中添加了以下内容:
<appSettings>
    <add key="webpages:Enabled" value="true" />
</appSettings>

这段代码似乎足以混淆您通常定义的登录页面:

<authentication mode="Forms">
  <forms loginUrl="login" timeout="43200"/>
</authentication>

我已经通过在appSettings中添加一个额外的“loginUrl”键来解决了这个问题:
<appSettings>
    <add key="webpages:Enabled" value="true" />
    <add key="loginUrl" value="~/Login.aspx" /><!-- Override default -->
</appSettings>

1

loginUrl参数没有绝对路径,因此路径会与网站的相对文件夹混合。

解决方案:

loginUrl="~/login"

或者

loginUrl="/login"

0

问题是

loginUrl="login"

这是用于发送未经身份验证的用户的URL。如果您的登录页面的URL为“Login.aspx”,那么您应该将其设置为此。

loginUrl="login.aspx"

最后的一段,ReturnURL,是用户成功登录后重定向到的地址。


这实际上不是问题。我使用URL路由,/login是一个真实的位置。即使更改为本地文件名(login.aspx),我仍然会得到相同的“不受控制”的重定向。 - Erik5388
这对我来说似乎与您的URL路由有些关联,或者至少值得调查。您能否发布您的路由配置/代码? - Peter
忘记路由...我相信不是那个问题...配置将我重定向到此页面localhost:1234/Account/Login?ReturnUrl=%2flogin我的项目中根本不存在文件夹/页面/变量/url/路由"Account/Login"我该如何覆盖它?"Account/Login"是如何添加到这个混乱中的? - Erik5388

0
登录网址是通过代码 UrlPath.Combine(HttpRuntime.AppDomainAppVirtualPathString, loginUrl); 创建的,因此我猜测您的网站根目录设置为“Application”。

http://www.ureader.com/msg/15372322.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接