Tomcat 8.5 JDB C Область с переваренным соленым паролем: ошибка аутентификации - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь запустить аутентификацию с использованием переваренного пароля. К сожалению, проверка подлинности завершается с ошибкой 401.

сервер. xml

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase">
            <CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler" algorithm="SHA-512" />
        </Realm>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

            <Realm className="org.apache.catalina.realm.JDBCRealm" 
                driverName="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/usersdb?user=root&amp;password=MySQL_Password"
                userTable="users"
                userNameCol="user_name" 
                userCredCol="user_pass"
                userRoleTable="user_roles" 
                roleNameCol="role_name">

                <CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler"
                    algorithm="SHA-512"
                    iterations="3"
                    saltLength="8"
                />
            </Realm>

        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

В моей базе данных usersdb есть таблица с именем users со столбцами user_name и user_pass. Также есть таблица user_roles с user_name и role_name.

Моего пользователя зовут syncuser и у него есть роль users.sync.

Я перевариваю пароль

digest.bat -a sha-512 -i 3 -s 8 -h org.apache.catalina.realm.MessageDigestCredentialHandler MySyncPassword
MySyncPassword:5800a4431c85d7a2$3$81a3cbfe53c94b128c1a37e5101cc7d5c5c69f4b4d4262113247a6db79bb5f8bcdcf57df8b2e1980d954be4ece50c40d862c866d3c44e2fc02cd6ecebcc4a830

Я поместил всю строку 5800a4431c85d7a2$3$81a3cbfe53c94b128c1a37e5101cc7d5c5c69f4b4d4262113247a6db79bb5f8bcdcf57df8b2e1980d954be4ece50c40d862c866d3c44e2fc02cd6ecebcc4a830 в свой столбец user_pass.

В нижней части сети. xml внутри моего проекта у меня есть

  <login-config>
    <auth-method>BASIC</auth-method>
  </login-config>
  <security-constraint>
    <display-name>My Magical Project Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>ServerBackend</web-resource-name>
      <url-pattern>/SyncServlet</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>users.sync</role-name>
    </auth-constraint>
  </security-constraint>
  <security-role>
    <role-name>users.sync</role-name>
  </security-role>
  <security-role>
    <role-name>*</role-name>
  </security-role>
</web-app>

Я уже попробовал все это простым способом с шифрованием MD5, 1 итерацией и 0 солью. Проблема сохраняется.

1 Ответ

0 голосов
/ 07 февраля 2020

Как оказалось, мне не хватало библиотеки драйверов JDB C на моем сервере Tomcat. ClassNotFoundException не отображалось в консоли сервера.

Кроме того, я изменил connectionURL в теге Realm с connectionURL="jdbc:mysql://localhost:3306/usersdb?user=root&amp;password=MySQL_Password" на

connectionURL="jdbc:mysql://localhost:3306/usersdb"
connectionName="root"
connectionPassword="MySQL_Password"
...