【问题标题】:.net IIS form authentication always denies access even with a properly configured web.config.net IIS 表单身份验证始终拒绝访问,即使使用正确配置的 web.config
【发布时间】: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://support.microsoft.com/en-us/help/301240/how-to-implement-forms-based-authentication-in-your-asp-net-applicatio

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=\&quot;Web\&quot; /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 服务器管理员。

标签: asp.net iis


【解决方案1】:

您需要允许未经身份验证的用户访问您的登录页面。

尝试将其添加到 web.config:

<location path="login.aspx">
    <system.web>
        <authorization>
        <allow users ="*" />
    </authorization>
</system.web>
</location>

【讨论】:

  • 谢谢。我在一些谷歌上也看到了这一点,并认为我之前尝试过。我也重新设置了该代码,但仍然得到 401.2,这是 web.config 现在的样子,请查看我更新的编辑.. 我的 login.aspx 和 Default.aspx 都在我的项目和站点的根目录中不在任何其他目录中
  • 我能想到的唯一要检查的是网站的应用程序池的身份对包含您的网站的文件系统文件夹具有权限。另外,还有这个:stackoverflow.com/questions/11162430/…
  • thx 我将其从“特定用户”设置为 IUSR 更改为“应用程序池标识”,然后我确保默认应用程序池用户已读取并在文件夹上执行,我还设置了这作为站点级别以及 testlogin 应用程序级别。查看我对带有图像的原始帖子的更新..还记得我什至连我的 login.aspx 页面都没有尝试登录:(,它只是立即拒绝我访问。
  • 天哪!我通过这篇文章social.msdn.microsoft.com/Forums/sqlserver/en-US/… 弄清楚了,所以我必须为“login.aspx”添加一个位置路径,并为“login”添加不带 .aspx 扩展名的文件名:|为什么我不知道...我更新了我的帖子
猜你喜欢
  • 1970-01-01
  • 2019-12-12
  • 2017-08-19
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多