Аутентификация форм и бесконечные перенаправления? - PullRequest
0 голосов
/ 08 января 2019

У нас есть несколько HTML-страниц в виртуальном каталоге Payroll в IIS7. Одна из HTML-страниц называется Sales.html . Все эти страницы являются чистым HTML.

Я включил Forms Authentication и изменил web.config, чтобы страницы HTML попадали под этот тип аутентификации. Вот как выглядит мой web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="Users" value="BobJ,JosephB"/>
  </appSettings>
  <system.webServer>
    <handlers>
      <add name="HTML" path="*.html" verb="GET, HEAD, POST, DEBUG"   type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
      <add name="HTM" path="*.htm" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
  </system.webServer>
  <system.web>
    <authentication mode="Forms">
      <forms name="appNameAuth" path="/" loginUrl="login.aspx" defaultUrl="index.html" protection="All" timeout="525600">
        <credentials passwordFormat="Clear">
          <user name="[user]" password="[password]" />
        </credentials>
      </forms>
    </authentication>
    <authorization>
      <deny users="?" />
    </authorization>
    <compilation debug="true" targetFramework="4.5">
      <buildProviders>
        <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
        <add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
      </buildProviders>
    </compilation>
    <httpRuntime targetFramework="4.5" />
    <customErrors mode="Off"/>
  </system.web>
</configuration>

Итак, Page_Load из login.aspx выглядит следующим образом. При Аутентификации по формам любой посетитель любого Sales.html будет перенаправлен на login.aspx. Я хотел проверить в page_load, сравнить пользователя со списком пользователей в web.config и Response.Redirect в соответствии с пользователем:

protected void Page_Load(object sender, EventArgs e)
{
    string htmlPage = Convert.ToString(Request.QueryString["ReturnUrl"]);
    string user = Request.LogonUserIdentity.Name;

    string users = ConfigurationManager.AppSettings["Users"].ToString();

    string[] allUsers = users.Split(',');

    if (allUsers.ToList().Contains(user))
    {
        Response.Redirect(htmlPage);
    }
    else
    {
        Response.Redirect("InvalidUser.html");
    }

}

Проблема заключается в бесконечном перенаправлении: каждый раз, когда page_load перенаправляет на Sales.html , это приведет меня к login.aspx , что затем приведет меня * снова * до Sales.html . Это бесконечный цикл.

Какие у меня есть альтернативы? Я не хочу создавать целевую страницу.

1 Ответ

0 голосов
/ 09 января 2019

В итоге я воспользовался решением в Проверка подлинности Windows для определенной группы пользователей Windows и добавил <authorization> внутри <system.web>:

<authorization>
  <allow users="domain\bobj, domain\ralphk" />
  <deny users="*" />
</authorization>

Мой web.config выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="HTML" path="*.html" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
      <add name="HTM" path="*.htm" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
        <staticContent>
            <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
        </staticContent>
  </system.webServer>
  <system.web>
    <authorization>
      <allow users="domain\bobj, domain\ralphk" />
      <deny users="*" />
    </authorization>
    <compilation targetFramework="4.5">
      <buildProviders>
        <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
        <add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
      </buildProviders>
    </compilation>
    <httpRuntime targetFramework="4.5" />
    <customErrors mode="Off" />
        <identity impersonate="false" />
  </system.web>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...