Начиная с версии 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>