#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
- Добавьте пользователя и пароль, которые будут использоваться для ДАЙДЖЕСТ-аутентификации.
$ 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
- Добавьте имя пользователя и хэш в файл ./standalone/configuration/application-users.properties
username=03e86946408b9e9c85c7b62f3d811062
- Добавьте роль в ./standalone/configuration/application-roles.properties
username=RoleName
- В моем приложении 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>
- В нижней части моего приложения 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>
- Затем я выполнил эти три команды 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"])
- Затем перезагрузите jboss и разверните приложение. Когда пользователь пытается получить доступ к / rest /, ему будет предложено ввести имя пользователя и пароль, которые вы создали на шаге 1