Show/Hide Toolbars

Руководство по тех. обслуживанию

Настройка аутентификации по токенам

Ссылки Назад Вверх Вперед

Начиная с версии 2.184 система "Первая Форма" (в том числе интерфейс "Личный Кабинет") использует только аутентификацию по токенам. Ниже описаны настройки, которые должны быть в файле web.config:

1. enableSessionState="false"

2. По умолчанию

<sessionState mode="Off" />

(все остальные атрибуты у sessionState можно удалить)

Но если в приложении развернут модуль опросов, то

<sessionState mode="InProc" />

3. Если в web.config прописан анонимный доступ для роутов, начинающихся с app/v1.0/api/Admin_Manual/comments, этот анонимный доступ необходимо убрать. Можно остановить Windows-сервис aspnet_state.

Также начиная с версии 2.184 токен должен передаваться в заголовке 1FormaAuth, а не Authentication, как было ранее.

Настройки для "Первой Формы" с аутентификацией Forms

1. Полностью закомментировать тег authentication.

2. В секцию appSettings добавить следующие значения:

<add key="AuthByToken" value="true" />
<add key="AuthTokenExpiresInMinutes" value="1500" />
<add key="AuthTokenLoginUrl" value="~/Login.aspx"/>

3. В секцию system.webServer / modules добавить:

<remove name="JwtAuthModule" />
<add name="JwtAuthModule" type="TaskCenter.Authorization.JwtAuthModule" preCondition="integratedMode" />
<remove name="FormsAuthenticationModule" />
<remove name="FormsAuthentication" />

4. В конце списка тегов location добавить:

<location path="js">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="component/GeoLocation.js">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.0/api/DataSync/Import">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="Login.aspx">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="CustomerZone/Copied">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>

 

5. Добавить, если нет:

<location path="app/v1.0/api/auth/token">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.1/api/confirmKillPush">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.2/api/info">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.2/api/publications">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="img">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
  <system.webServer>
      <staticContent>
          <clientCache cacheControlMode="UseExpires" cacheControlMaxAge="1.00:00:00" httpExpires="Wed, 31 Dec 2030 00:00:00 GMT" />
      </staticContent>
      <httpProtocol>
          <customHeaders>
              <add name="Cache-Control" value="public,max-age=31536000" />
          </customHeaders>
      </httpProtocol>
  </system.webServer>
</location>
<location path="Login.js">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>

 

6. Удалить, если было:

<location path="app/v1.0/api">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.1/api">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.2/api">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>

Настройки для "Первой Формы" с аутентификацией Windows

1. Тег authentication остается:

<authentication mode="Windows"/>

2. В секцию appSettings добавить следующие значения:        

<add key="AuthByToken" value="true" />  
<add key="AuthTokenExpiresInMinutes" value="1500" />

3. В конце списка тегов location добавить:

<location path="js">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="component/GeoLocation.js">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.0/api/DataSync/Import">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="Login.aspx">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="CustomerZone/Copied">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>

 

4. Добавить, если не было:

<location path="app/v1.0/api/auth/token">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.1/api/confirmKillPush">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.2/api/info">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.2/api/publications">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="img">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
  <system.webServer>
      <staticContent>
          <clientCache cacheControlMode="UseExpires" cacheControlMaxAge="1.00:00:00" httpExpires="Wed, 31 Dec 2030 00:00:00 GMT" />
      </staticContent>
      <httpProtocol>
          <customHeaders>
              <add name="Cache-Control" value="public,max-age=31536000" />
          </customHeaders>
      </httpProtocol>
  </system.webServer>
</location>
<location path="Login.js">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>

 

5. Удалить, если было:

<location path="app/v1.0/api">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.1/api">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>
<location path="app/v1.2/api">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>

Настройка редиректа с Windows на forms приложение

Редирект с Windows на forms приложение необходимо настраивать, если нужна работа по протоколу http/2 и есть балансировка нагрузки через nginx.

При настроенном редиректе для работы в Windows-приложении пользователи должны проходить аутентификацию и получать токены в forms-приложении.

Порядок настройки редиректа:

1. Настроить два приложения (с Windows и forms аутентификацией) в одном домене.

2. В файле web.config приложения с forms-аутентификацией в секцию appSettings добавить:

<add key="WinToFormsRedirectWinUrl" value="https://win.myDomain.ru" />
<add key="SetCookieForUpperLevelDomain" value="true"/>

где вместо win.myDomain.ru указан базовый адрес приложения с Windows-аутентификацией.

3. В файле web.config приложения с Windows-аутентификацией в секцию appSettings добавить:

<add key="WinToFormsRedirectFormsUrl" value="https://forms.myDomain.ru" />
<add key="SetCookieForUpperLevelDomain" value="true"/>

где вместо forms.myDomain.ru указан базовый адрес приложения с forms-аутентификацией.

4. Пользователи должны заходить в приложение с forms-аутентификацией.

Проверка корректности настройки редиректа

1. Зайти на адрес https://forms.myDomain.ru/default.aspx (вместо default.aspx может быть любой адрес).

2. Если пользователь не авторизован, он перенаправляется на адрес https://win.myDomain.ru/default.aspx (response: Status: 302 Found; Location: https://win.myDomain.ru/default.aspx).

3. У пользователя запрашивается Windows-аутентификация (в зависимости от настроек браузера и политик домена аутентификация может выполняться автоматически).

4. Запрос проходит Windows-аутентификацию IIS и код "Первой Формы" выдает браузеру файл cookie 1FormaAuth, в котором содержится токен "Первой Формы". Одновременно пользователь перенаправляется на адрес https://forms.myDomain.ru/default.aspx (response: Status: 302 Found; Location: https://forms.myDomain.ru/default.aspx).

5. Запрос от браузера пользователя вместе с файлом cookie перенаправляется на адрес https://forms.myDomain.ru/default.aspx.

В результате пользователь работает в forms-приложении, но аутентификация происходит через Windows-приложение.

Если пользователь неактивен в "Первой Форме" в течение какого-то времени, файл cookie становится невалидным, и forms-приложение перенаправляет пользователя обратно на Windows-приложение, чтобы выдать новый файл cookie.

Настройки для Личного Кабинета

1. Полностью закомментировать тег authentication.

2. В секцию appSettings добавить следующие значения:

<add key="AuthByToken" value="true" />
<add key="AuthTokenExpiresInMinutes" value="1500" />
<add key="AuthTokenLoginUrl" value="~/Login"/>

3. В секцию system.webServer / modules добавить:

<remove name="JwtAuthModule" />
<add name="JwtAuthModule" type="CustomerZoneSPA.Authorization.JwtAuthModule" preCondition="integratedMode" />
<remove name="FormsAuthenticationModule" />
<remove name="FormsAuthentication" />

4. В конце списка тегов location добавить:

<location path="Login">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>

 

Настройки для модуля опросов

1. Полностью закомментировать тег authentication.

2. В секцию appSettings добавить следующие значения:

<add key="AuthByToken" value="true" />
<add key="AuthTokenExpiresInMinutes" value="1500" />
<add key="AuthTokenLoginUrl" value="~/default.aspx"/>

3. Перед закрытием секции system.webServer добавить:

<modules>
  <remove name="JwtAuthModule" />
  <add name="JwtAuthModule" type="Votations.NSurvey.WebAdmin.Authorization.JwtAuthModule" preCondition="integratedMode" />
  <remove name="FormsAuthenticationModule" />
  <remove name="FormsAuthentication" />
</modules>

4. Если опросы развернуты отдельно, данный пункт не выполняется.
Если опросы развернуты в виртуальной директории в "Первой Форме", то дополнительно к настройкам аутентификации "Первой Формы" необходимо выполнить следующие действия:

в элемент system.web добавить

<sessionState mode="InProc" />

для элемента system.web/pages указать атрибут enableSessionState="true"

<pages validateRequest="false" controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID" enableSessionState="true">

Двухфакторная аутентификация

В файле web.config приложения включить анонимный доступ для API-методов:

<location path="api/auth/token/code">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>

 

<location path="api/auth/code">
  <system.web>
      <authorization>
          <allow users="?" />
      </authorization>
  </system.web>
</location>