У меня есть собственный Аутентификатор в Weblogic 10.3, который я использую и у меня проблемы.
Когда пользователь подключается и аутентифицируется по HTTP, все работает нормально.Однако, если соединение является соединением JMX-RMI / T3, вызов javax.security.auth.callback.CallbackHandler.handle
вызывает исключение.Конструктор ContextHandlerCallback
по умолчанию используется и передается в массиве обратных вызовов с обратным вызовом имени пользователя и пароля.Ниже приведен код, в котором callbackHandler представляет собой javax.security.auth.callback.CallbackHandler
callbacks = new Callback[2];
callbacks[0] = new NameCallback("username: ");
callbacks[1] = new PasswordCallback("password: ", false);
callbacks[2] = new ContextHandlerCallback();
callbackHandler.handle(callbacks);
. Здесь верхняя часть исключения отбрасывается в точку callbackHandler.handle(callbacks)
сверху.:
javax.security.auth.callback.UnsupportedCallbackException: [Security:090175]Unrecognized Callback
at weblogic.security.SimpleCallbackHandler.handle(SimpleCallbackHandler.java:71)
at com.bea.common.security.internal.service.CallbackHandlerWrapper.handle(CallbackHandlerWrapper.java:76)
at weblogic.security.service.internal.WLSJAASLoginServiceImpl$CallbackHandlerWrapper.handle(WLSJAASLoginServiceImpl.java:156)
at javax.security.auth.login.LoginContext$SecureCallbackHandler$1.run(LoginContext.java:955)
at javax.security.auth.login.LoginContext$SecureCallbackHandler.handle(LoginContext.java:951)
И вот еще одна трассировка исключения, которую мы также наблюдаем:
javax.security.auth.callback.UnsupportedCallbackException: Unrecognized Callback
at weblogic.management.mbeanservers.internal.JMXAuthenticator$JMXCallbackHandler.handle(JMXAuthenticator.java:130)
at com.bea.common.security.internal.service.CallbackHandlerWrapper.handle(CallbackHandlerWrapper.java:76)
at weblogic.security.service.internal.WLSJAASLoginServiceImpl$CallbackHandlerWrapper.handle(WLSJAASLoginServiceImpl.java:156)
at javax.security.auth.login.LoginContext$SecureCallbackHandler$1.run(LoginContext.java:955)
at javax.security.auth.login.LoginContext$SecureCallbackHandler.handle(LoginContext.java:951)
Стоит отметить, что это исключение выдается, если пользователи аутентифицируются через JMX /Соединение T3, но HTTP работает просто отлично.
Часть того, что мы пытаемся достичь, - это сбор информации об аутентификации, такой как IP-адрес, с которого был получен запрос, поэтому нам нужен ContextHandlerCallback
.Я вижу, что попытка получить HttpServletRequest
из соединения JMX-RMI / T3 может вызвать проблемы, но возникает исключение во время javax.security.auth.callback.CallbackHandler.handle ().
Некоторая другая информация, которая может или не может быть релевантной, но почему бы не включить все, что я могу?
- Приложение использует аутентификацию на основе форм, как и вызовы WS, но вызов JMX-RMI / T3 не может.
- Не уверен, возможно ли определить, какую реализацию использовать для CallbackHandler при аутентификации.В настоящее время мы определили пользовательский модуль LoginModule, но не пользовательский CallbackHandler.
- Если за пределами ContextHandlerCallback есть способ получить доступ к IP-адресу вызывающего абонента внутри модуля LoginModule, это обеспечит подходящий обходной путь.1030 *
Я запутался, почему он будет работать по одному протоколу, а не по другому.Кто-нибудь еще видел такое поведение или знает способ справиться с этим?
Спасибо, Тодд