【发布时间】:2020-02-25 21:13:18
【问题描述】:
我有一个用于 Windows 2012 R2 IIS Web 服务器的测试虚拟环境设置和一个用于 DNS 等的 Windows DC 控制器。我正在使用名为 testweb 的 Windows 2012 R2 IIS Web 服务器。我有一个简单的 Visual Studio 2019 年 web 表单项目在 testweb 上运行。它基本上只是您开始使用的初始 .net Web 表单项目。我创建了一个 login.aspx 并配置了我的 web.config 文件,我使用了我在网上找到的几个教程,例如
https://www.c-sharpcorner.com/UploadFile/fa9d0d/forms-authentication-in-Asp-Net/
https://www.youtube.com/watch?v=AoRWKBbc6QI&t=207s ,一个视频来显示相同的
我已将我的网站和应用程序设置为允许表单身份验证
还为 IIS 安装了以下安全性
我的 webconfig 是初始项目的默认配置,仅添加了这些行
<authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="Default.aspx">
<credentials passwordFormat="Clear">
<user name="user1" password="password1"/>
<user name="user2" password="password2" />
</credentials>
</forms>
</authentication>
<authorization>
<deny users ="?" />
<allow users = "*" />
</authorization>
如果我尝试访问已发布的网站,我会得到以下信息:
如果我删除这些行:
<authorization>
<deny users ="?" />
<allow users = "*" />
</authorization>
然后我可以点击http://testweb/testlogin/,它会完美地调出 Default.aspx !!所以我在挠头,很好地敲打我的头,试图弄清楚什么没有正确设置或者我错过了什么?我已经在线阅读了每个教程。即使我只有拒绝用户?在 web.config 中它仍然不起作用。
<authorization>
<deny users ="?" />
</authorization>
任何帮助表示赞赏,再次只是试图了解如何在测试环境中获取表单身份验证并从那里开始.. 但似乎只要添加 Auth 以拒绝匿名用户?它只是在否定我。我的例外是我应该得到我的 login.aspx 页面,但它无法正常工作。
基于回复/cmets 的当前 web.config:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.7.2"/>
<httpRuntime targetFramework="4.7.2"/>
<pages>
<namespaces>
<add namespace="System.Web.Optimization"/>
</namespaces>
<controls>
<add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt"/>
</controls>
</pages>
<authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="Default.aspx">
<credentials passwordFormat="Clear">
<user name="user1" password="password1"/>
<user name="user2" password="password2" />
</credentials>
</forms>
</authentication>
<authorization>
<deny users ="?" />
</authorization>
</system.web>
<location path="login.aspx">
<system.web>
<authorization>
<allow users ="*" />
</authorization>
</system.web>
</location>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f"/>
<bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
</configuration>
包含我的测试网站的文件夹设置了 defaultapp 池,并且 defaultapp 池用户已读取/执行,之前没有设置,但我设置了它,它没有任何区别,见下图
更新和修复*
所以我终于找到了这篇文章https://social.msdn.microsoft.com/Forums/sqlserver/en-US/2920a4e2-775a-4aa7-bfff-4931fa0a4e9a/azure-website-forms-authentication-issue?forum=windowsazurewebsitespreview 如果遵循它并添加了第二条路径语句,只需在没有 .aspx 的情况下登录,那么它就可以工作了!我能够很好地访问我的 login.aspx 页面。
所以我最终的工作 Web.config 看起来像这样或表单身份验证的代码片段。
<system.web>
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="login.aspx" defaultUrl="Default.aspx">
<credentials passwordFormat="Clear">
<user name="user1" password="password1"/>
<user name="user2" password="password2"/>
</credentials>
</forms>
</authentication>
<authorization>
<deny users ="?" />
</authorization>
</system.web>
<location path="login.aspx">
<system.web>
<authorization>
<allow users ="*" />
</authorization>
</system.web>
</location>
<location path="login">
<system.web>
<authorization>
<allow users ="*" />
</authorization>
</system.web>
</location>
【问题讨论】:
-
读取 IIS 日志文件以查看是否命中 401.3 或其他子状态代码,support.microsoft.com/en-us/help/943891/…
-
如果我从 VStudio 调试它,我的浏览器会显示“'/' 应用程序中的服务器错误”.. 然后 401.2 错误消息 401.2.: 未经授权:由于服务器配置,登录失败。根据您提供的凭据和 Web 服务器上启用的身份验证方法,验证您是否有权查看此目录或页面。如需更多帮助,请联系 Web 服务器管理员。