. net Проверка подлинности формы IIS всегда запрещает доступ даже с правильно настроенным web.config. - PullRequest
1 голос
/ 26 февраля 2020

У меня есть тестовая настройка виртуальной среды для веб-сервера IIS windows 2012 R2 и контроллер windows D C для DNS и т. Д. c .. Я работаю с windows 2012 R2 IIS веб-сервер под названием testweb .. у меня есть простой проект Visual Studio 2019 веб-формы, запущенный из testweb. это в основном только начальный. net проект веб-формы, с которого вы начинаете. я создал 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 website config

enter image description here

также установлена ​​следующая защита для IIS

enter image description here

мой 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>

Если я пытаюсь попасть на опубликованный сайт, я получаю следующее:

enter image description here

Если я уберу строки:

<authorization>
     <deny users ="?" />
     <allow users = "*" />  
  </authorization>

Тогда я могу нажать http://testweb/testlogin/, и это вызовет значение по умолчанию .aspx прекрасно! так что я чешу голову, хорошо стучу головой, пытаюсь выяснить, что не правильно установлено или что мне не хватает ?? я просмотрел каждый учебник онлайн. даже если у меня есть только запретить пользователям? в web.config он все еще не работает.

 <authorization>
     <deny users ="?" />
  </authorization>

Любая помощь приветствуется, опять же, просто пытаюсь понять, как заставить аутентификацию форм работать в тестовом окружении и go оттуда ... но похоже как только добавить Auth, чтобы запретить анонимным пользователям? это просто отрицает меня вокруг. мои исключения: я должен получать страницу login.aspx, но она просто не работает.

Текущий файл 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 прочитал / выполнил, что не было задано ранее, но я установил его, и это не сделало никаких различий, см. изображение ниже

enter image description here

ОБНОВЛЕНИЕ и ИСПРАВЛЕНИЕ *

, так что я наконец-то нашел этот пост https://social.msdn.microsoft.com/Forums/sqlserver/en-US/2920a4e2-775a-4aa7-bfff-4931fa0a4e9a/azure-website-forms-authentication-issue?forum=windowsazurewebsitespreview и, если последовал, добавил 2-й оператор пути для просто войдите без .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>

1 Ответ

1 голос
/ 26 февраля 2020

Вам необходимо разрешить неаутентифицированным пользователям доступ к вашей странице входа.

Попробуйте добавить это в web.config:

<location path="login.aspx">
    <system.web>
        <authorization>
        <allow users ="*" />
    </authorization>
</system.web>
</location>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...