Ошибка аутентификации Tomcat – 401 Неавторизованно

Вопрос или проблема

У меня ошибка при попытке получить доступ к консоли управления Tomcat (Apache Tomcat/8.0.50).

ПРЕДУПРЕЖДЕНИЕ [http-apr-8080-exec-7]
org.apache.catalina.realm.LockOutRealm.filterLockedAccounts Попытка
была сделана для аутентификации заблокированного пользователя “admin”

Я изменил конфигурационный файл “tomcat-users.xml” и перезапустил Tomcat

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
<user username="admin" password="!w@B@#7XTFj" roles="manager-gui,admin-gui" />

Информация о “realm” в server.xml

<Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- Этот Realm использует UserDatabase, настроенную в глобальных JNDI
             ресурсах под ключом "UserDatabase".  Любые изменения,
             которые выполняются с этим UserDatabase, сразу
             доступны для использования Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

и о “Resources”

<GlobalNamingResources>
    <!-- Редактируемая пользовательская база данных, которая также может использоваться
         UserDatabaseRealm для аутентификации пользователей
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="Пользовательская база данных, которая может быть обновлена и сохранена"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
                     <Resource name="jdbc/ERS"
                        auth="Container"
                        type="javax.sql.DataSource"
                        driverClassName="oracle.jdbc.OracleDriver"
                        url="jdbc:oracle:thin:@servername:port:BDD_name"
                        username="SAU_BIS"
                        password="V0t0,z91!"
                        maxActive="100000"
                        maxIdle="100000"  />
  </GlobalNamingResources>

Я добавил уровень журнала: org.apache.catalina.realm.level = FINE и у меня есть эта информация:

13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[JMX Proxy interface]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[Status interface]' по GET /status --> true
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[HTML Manager interface (for humans)]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[Text Manager interface (for scripts)]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[JMX Proxy interface]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[Status interface]' по GET /status --> true
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[HTML Manager interface (for humans)]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[Text Manager interface (for scripts)]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.hasUserDataPermission   Ограничение пользовательских данных не имеет ограничений
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[JMX Proxy interface]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[Status interface]' по GET /status --> true
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[HTML Manager interface (for humans)]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[Text Manager interface (for scripts)]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[JMX Proxy interface]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[Status interface]' по GET /status --> true
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[HTML Manager interface (for humans)]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints   Проверка ограничения 'SecurityConstraint[Text Manager interface (for scripts)]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.hasUserDataPermission   Ограничение пользовательских данных не имеет ограничений
13-Мар-2020 08:19:24.361 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.CombinedRealm.authenticate Попытка аутентификации пользователя "admin" с realm "org.apache.catalina.realm.UserDatabaseRealm"
13-Мар-2020 08:19:24.361 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.CombinedRealm.authenticate Не удалось аутентифицировать пользователя "admin" с realm "org.apache.catalina.realm.UserDatabaseRealm"

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

Какие-нибудь идеи?

Сказано, что имя пользователя ‘admin’ заблокировано, измените имя пользователя на любое другое и перезапустите сервер Tomcat.

Ответ или решение

Ошибка 401 Unauthorized при доступе к консоли управления Tomcat

Когда вы сталкиваетесь с ошибкой 401 Unauthorized при попытке доступа к консоли управления Apache Tomcat (версии 8.0.50), скорее всего, вы имеете дело с проблемами аутентификации пользователя. В вашем случае сообщение об ошибке указывает на то, что учетная запись "admin" заблокирована.

Анализ проблемы

В логах Tomcat вы видите сообщение:

WARNING [http-apr-8080-exec-7]
org.apache.catalina.realm.LockOutRealm.filterLockedAccounts An attempt was made to authenticate the locked user "admin"

Это означает, что пользователь "admin" был заблокирован из-за слишком большого числа неудачных попыток входа в систему. Ваша настройка LockOutRealm предназначена для предотвращения несанкционированного доступа, но в данном случае она создала проблему с доступом.

Решение проблемы

  1. Изменение имени пользователя:
    Чтобы обойти блокировку пользователя "admin", рекомендуется изменить имя пользователя в файле tomcat-users.xml. Например, вы можете использовать имя admin_new, как показано ниже:

    <tomcat-users xmlns="http://tomcat.apache.org/xml"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
                 version="1.0">
       <user username="admin_new" password="!w@B@#7XTFj" roles="manager-gui,admin-gui" />
    </tomcat-users>
  2. Перезапуск Tomcat:
    После внесения изменений в файл tomcat-users.xml необходимо перезапустить сервер Tomcat, чтобы новые настройки вступили в силу.

  3. Сброс блокировки пользователя:
    Если вы хотите продолжать использовать имя пользователя "admin", вам потребуется сбросить его блокировку. Это можно сделать, удалив все записи о блокировках из базы данных пользователей, однако этот процесс может быть сложнее и потребует дальнейшей настройки.

  4. Проверка конфигурации Realm:
    Убедитесь, что в вашем файле server.xml правильно настроен Realm. Вы используете LockOutRealm, который в свою очередь использует UserDatabaseRealm. Убедитесь, что все ссылки на файлы настроены корректно.

    Пример:

    <Realm className="org.apache.catalina.realm.LockOutRealm">
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
              resourceName="UserDatabase"/>
    </Realm>
  5. Логи и отладка:
    Для дальнейшей диагностики вы можете включить более подробное логгирование (как вы уже это сделали) и анализировать сообщения на уровне FINE. Это поможет понять, почему сервер не может аутентифицировать пользователя.

Заключение

Ошибка 401 Unauthorized зачастую связана с проблемами аутентификации и может быть решена изменением имени пользователя, которое блокировано, или сбросом блокировки. При правильной конфигурации Realm и безопасном управлении пользователями, доступ к консоли управления Tomcat станет возможным.

Рекомендуется следить за средствами мониторинга и регистрировать попытки доступа, что поможет предотвратить повторение подобных проблем в будущем.

Оцените материал
Добавить комментарий

Капча загружается...