дайджест-аутентификация для приложения, развернутого на jboss 7.2

#hash #callback #jboss

#хэш #обратный вызов #jboss

Вопрос:

Я настроил login-модуль в web.xml приложения, запущенного на jboss7.2

 <login-config>
        <auth-method>DIGEST</auth-method>
        <realm-name>newrealm</realm-name>
</login-config>
  

В jboss-web.xml настроен с помощью домена безопасности

 <jboss-web>
  <security-domain>securitydomain1</security-domain>
</jboss-web>
  

В standalone.xml настраивается с помощью домена безопасности следующим образом

 <security-domain name="RPAHttps" cache-type="default">
                    <authentication>
                        <login-module code="UsersRoles" flag="required">
                            <module-option name="usersProperties" value="D:jboss7jboss-eap-7.2standaloneconfigurationrpahttpsusers.properties"/>
                            <module-option name="rolesProperties" value="D:jboss7jboss-eap-7.2standaloneconfigurationrpahttpsroles.properties"/>
                            <module-option name="defaultUsersProperties" value="D:jboss7jboss-eap-7.2standaloneconfigurationrpahttpsusers.properties"/>
                            <module-option name="defaultRolesProperties" value="D:jboss7jboss-eap-7.2standaloneconfigurationrpahttpsroles.properties"/>
                            <module-option name="hashAlgorithm" value="MD5"/>
                            <module-option name="hashEncoding" value="rfc2617"/>
                            <module-option name="ignorePasswordCase" value="false"/>
                            <module-option name="hashStorePassword" value="true"/>
                            <module-option name="hashUserPassword" value="false"/>
                            <module-option name="passwordIsA1Hash" value="true"/>
                            <module-option name="storeDigestCallback" value="org.jboss.security.auth.callback.RFC2617Digest"/>
                        </login-module>
                    </authentication>
                </security-domain>
  

Я сгенерировал пароль, хранящийся в файлах свойств, как показано ниже

 D:jboss7jboss-eap-7.2modulessystemlayersbaseorgpicketboxmain>java -classpath picketbox-5.0.3.Final-redhat-3.jar org.jboss.security.auth.callback.RFC2617Digest TD-ADMIN new_1015 RPAHttpsRealm
RFC2617 A1 hash: cdb6fe455334228532b07355043afcb6
  

Пожалуйста, обратите внимание, что я указал то же значение в опции модуля storeDigestCall back. Я напрасно пробовал другие классы обратного вызова

я получаю следующую ошибку, не могли бы вы, пожалуйста, помочь

UG [ввод-вывод.undertow.request.security] (задача по умолчанию-2) Результат аутентификации не был проверен с помощью метода io.undertow.security.impl.CachedAuthenticatedSessionMechanism@234fd496 для /rpaws/ services/SearchIPAddressPort 03:19:06,161 DEBUG [org.jboss.security] (задача по умолчанию-2) PBOX00281: активировано хэширование пароля, алгоритм: MD5, кодировка: rfc2617, кодировка: null, обратный вызов: null, обратный вызов хранилища: org.jboss.security.auth.callback.RFC2617Digest 03:19:06,173 DEBUG [org. jboss.security] (задача по умолчанию-2) PBOX00283: неверный пароль для имени пользователя TD-ADMIN 03:19:06,173 DEBUG [org.jboss.security] (задача по умолчанию-2) PBOX00206: ошибка входа в систему: javax.security.auth.войти.Ошибка в логине: PBOX00070: неверный пароль / требуется пароль в org.picketbox//org.jboss.security.auth.spi.UsernamePasswordLoginModule.войдите в систему (UsernamePasswordLoginModule.java:286) в org.picketbox//org.jboss.security.auth.spi.UsersRolesLoginModule.войдите в систему (UsersRolesLoginModule.java:171) на java.base/javax.security.auth.войти.LoginContext.invoke(LoginContext.java:726) на java.base/javax.security.auth.войти.LoginContext $4.запустите(LoginContext.java:665) на java.base /javax.security.auth.войти.LoginContext $4.запустите(LoginContext.java:663) на java.база / java.security.Контроллер доступа.Допривилегировано (собственный метод) в java.base / javax.security.auth.войти.LoginContext.invokePriv(LoginContext.java:663) в java.base/javax.security.auth.войти.LoginContext.login(LoginContext.java:574) в org.picketbox//org.jboss.security.authentication.JBossCachedAuthenticationManager.defaultLogin(JBossCachedAuthenticationManager.java:406) в org.picketbox//org.jboss.security.authentication.JBossCachedAuthenticationManager.Продолжайте с JA aslogin(JBossCachedAuthenticationManager.java:345) в org.picketbox//org.jboss.security.authentication.JBossCachedAuthenticationManager.authenticate(JBossCachedAuthenticationManager.java:323) в org.picketbox//org.jboss.security.authentication.JBossCachedAuthenticationManager.isValid(JBossCachedAuthenticationManager.java:146) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.security.JAASIdentityManagerImpl.verifyCredential(JAASIdentityManagerImpl.java:123) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.security.JAASIdentityManagerImpl.verify(JAASIdentityManagerImpl.java:89) в организации.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.security.digest.Механизм проверки подлинности DigestAuthenticationMechanism.handleDigestHeader(DigestAuthenticationMechanism.java:312) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.security.digest.Механизм проверки подлинности DigestAuthenticationMechanism.authenticate (DigestAuthenticationMechanism.java:170) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.impl.SecurityContextImpl$AuthAttempter.transition(SecurityContextImpl.java:245 ) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.impl.SecurityContextImpl$AuthAttempter.transition(SecurityContextImpl.java:268 ) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.impl.SecurityContextImpl$AuthAttempter.access$100(SecurityContextImpl.java:231 ) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.impl.SecurityContextImpl.attemptAuthentication(SecurityContextImpl.java:125 ) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.impl.SecurityContextImpl.authTransition(SecurityContextImpl.java:99 ) при вводе-выводе.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.impl.SecurityContextImpl.authenticate(SecurityContextImpl.java:92 ) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:55) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.server.handlers .Отключить обработчик кэша.handleRequest(DisableCacheHandler.java:33) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(АутентификацияConstraintHandler.java:53) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.handlers .AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64 ) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.handlers.Запрос AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) на io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50 ) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43 ) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61 ) при вводе-выводе.undertow.core@2.0.15.Final-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.access за 100 долларов (ServletInitialHandler.java:81) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler $2.вызовите (ServletInitialHandler.java:138) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler $2.вызовите (ServletInitialHandler.java:135) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$ 1.вызовите (ServletRequestContextThreadSetupAction.java:48) при вводе-выводе.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.core.ContextClassLoaderSetupAction$ 1.вызовите (ContextClassLoaderSetupAction.java:43) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502) в org.wildfly.extension.undertow@7.2.0.GA-redhat-00005//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.лямбда $create$0(UndertowDeploymentInfoService.java:1502) при вводе-выводе.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.access стоимостью $000 (ServletInitialHandler.java:81) в io.undertow.servlet@2.0.15.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.server.Connectors.executeRootHandler (Connectors.java: 360) в io.undertow.core@2.0.15.Final-redhat-00001//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830 ) в org.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) в org.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.Улучшенный queueexecutor.safeRun (улучшенный queueexecutor.java: 1985) в org.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.Улучшенный queueexecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487) в организации.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.Расширенный queueexecutor$ThreadBody.run(расширенный queueexecutor.java:1378) на java.base / java.lang.Thread.run(Thread.java:834)

03:19:06,175 DEBUG [io.undertow.request.security] (задача по умолчанию-2) Сбой аутентификации с сообщением UT000038: сбой аутентификации, запрошено имя пользователя ‘TD-ADMIN’ и ДАЙДЖЕСТ механизма для HttpServerExchange{ Запрос POST / rpaws / services / SearchIPAddressPort {Подключение = [Keep-Alive], SOAPAction = [«»], Авторизация = [Дайджест имени пользователя =»TD-ADMIN», область =»RPAHttpsRealm» , одноразовый номер=»RFQLuAOrMiANMTU5ODIxOTM0NjE1NGdPOKC 2c1pRogJZwM8eYU=», uri=»/rpaws/services/SearchIPAddressPort», ответ= «a0e500d779a876633b968e0180f3da42″, qop=auth, nc=00000001, cnonce=»c18eb749fd10230c», алгоритм =MD5, непрозрачный = «000000000000000000000000000000000000»], Accept-Encoding=[gzip, deflate], Content-Type = [текст / xml; кодировка = UTF-8], Content-Length = [652], User-Agent = [Apache-HttpClient /4.5.2 (Java / 12.0.1)], Host= [localhost: 8080]} ответ {Истекает = [0], Cache-Control =[нет кэша, нет хранилища, необходимо повторно проверять], Pragma = [нет кэша]}}

Ответ №1:

Я боролся с той же проблемой, но ваши дополнения к standalone.xml файл заставил это работать у меня. Вот как я это сделал. Надеюсь, это кому-то поможет.

Это было выполнено на Jboss-EAP 7.2.9

  1. Добавьте пользователя и пароль, которые будут использоваться для ДАЙДЖЕСТ-аутентификации.
 $ cd ./modules/system/layers/base/org/picketbox/main
$ java -classpath picketbox-5.0.3.Final-redhat-3.jar org.jboss.security.auth.callback.RFC2617Digest username PAssword1234 ApplicationRealm
RFC2617 A1 hash: 03e86946408b9e9c85c7b62f3d811062
  
  1. Добавьте имя пользователя и хэш в файл ./standalone/configuration/application-users.properties
 username=03e86946408b9e9c85c7b62f3d811062
  
  1. Добавьте роль в ./standalone/configuration/application-roles.properties
 username=RoleName
  
  1. В моем приложении jboss-web.xml файл
 <jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
      http://www.jboss.com/xml/ns/javaee
      http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
    <security-domain>filesystemSD</security-domain>
    <context-root>rest</context-root>
</jboss-web>
  
  1. В нижней части моего приложения web.xml файл, я добавил это:
 <security-constraint>
      <web-resource-collection>
          <web-resource-name>rest</web-resource-name>
          <url-pattern>/rest/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
          <role-name>RoleName</role-name>
      </auth-constraint>
  </security-constraint>

  <security-role>
      <role-name>RoleName</role-name>
  </security-role>

  <login-config>
      <auth-method>DIGEST</auth-method>
      <realm-name>ApplicationRealm</realm-name>
  </login-config>

</web-app>
  
  1. Затем я выполнил эти три команды jboss-cli
 /subsystem=security/security-domain=filesystemSD:add
/subsystem=security/security-domain=filesystemSD/authentication=classic:add
/subsystem=security/security-domain=filesystemSD/authentication=classic/login-module=UsersRoles:add(code=UsersRoles,flag=required,module-options=["usersProperties"=>"file:///${jboss.server.config.dir}/application-users.properties", 
"rolesProperties"=>"file:///${jboss.server.config.dir}/application-roles.properties", 
"hashAlgorithm"=>"MD5",
"hashEncoding"=>"rfc2617",
"ignorePasswordCase"=>"false",
"hashStorePassword"=>"true",
"hashUserPassword"=>"false",
"passwordIsA1Hash"=>"true",
"storeDigestCallback"=>"org.jboss.security.auth.callback.RFC2617Digest"])
  
  1. Затем перезагрузите jboss и разверните приложение. Когда пользователь пытается получить доступ к / rest /, ему будет предложено ввести имя пользователя и пароль, которые вы создали на шаге 1