Настройка безопасности для доступа к EJB через WS - WFLYEJB0364 Соединение отклонено - PullRequest
0 голосов
/ 09 января 2019

Я следовал этому руководству , чтобы настроить пользователя ejbuser с паролем 12345678 и ролью appCitas. Инструкции, которым я следовал:

C: \ wildfly-14.0.1.Final \ Bin> JBoss-cli.bat
Вы отключены в данный момент. Введите «connect» для подключения к серверу или «help» для получения списка поддерживаемых команд.
[отключено /] подключить

[standalone @ localhost: 9990 /] /subsystem=elytron/filesystem-realm=proxyRealm:add(path=proxy-realm-users,relative-to=jboss.server.config.dir)
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / filesystem-realm = proxyRealm: add-identity (identity = ejbuser)
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / filesystem-realm = proxyRealm: набор-пароль (identity = ejbuser, clear = {пароль = 12345678})
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / filesystem-realm = proxyRealm: add-identity-attribute (identity = ejbuser, name = Roles, value = ["guest", "appCitas"])
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / simple-role-decoder = атрибут from-role: add (attribute = Roles)
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / security-domain = proxySD: add (default-realm = proxyRealm ,missions-mapper = default-Разрешение-Mapper, Realms = [{realm = proxyRealm, role- декодер = от-ролей-атрибутов}, {сфера = локальная}]) * * тысяча двадцать восемь {"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / sasl-authentication-factory = proxy-application-sasl-autentication: add (механизм-конфигурации = [{имя-механизма = JBOSS-LOCAL-USER, realm- картостроитель = локальную}, {механизм имя = DIGEST-MD5, механизм-Холдинговая-конфигурация = [{-имя области = proxyRealm}]}, {механизм имя = BASIC, механизм-Холдинговые-конфигурации = [{область-имя = proxyRealm}]}], SASL-сервер-завод = настроено, безопасность домен = proxySD)
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = ejb3 / application-security-domain = other: add (security-domain = proxySD)
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = remoting / http-connector = http-remoting-connector: write-attribute (имя = фабрика аутентификации sasl, значение = proxy-application-sasl-autentication)
{ "исход" => "успех", "заголовки ответа" => { "операция требует перезагрузки" => истина, "process-state" => "требуется перезагрузка" } }

В ми EJB у меня есть

@WebService(
  endpointInterface = "es.ssib.otic.test.prototipoEjbCitas.ApiCitasPublico",
  name = "ApiCitasEjb")
@RolesAllowed("apiCitas")
@Stateless
public class ApiCitasPublicoImpl
    implements ApiCitasPublico {

    @Override
    public @XmlElement(name = "pacienteCitaResponse", required = true) PacienteCitaResponse getPacienteCita(
        @WebParam(name = "datosSolicitante") @XmlElement(required = true) IdPeticion idPaciente) {
   ...
}

И мой jboss-app.xml равен

<?xml version="1.0" encoding="UTF-8"?>
<jboss-app>
   <security-domain>other</security-domain>
</jboss-app>

Ухо развернуто правильно, и оно не показывает никаких проблем с журналом, но я пытаюсь получить доступ к методу из SoapUI и добавляю базовую аутентификацию с:

  • имя пользователя: ejbuser
  • пароль: 12345678
  • Домен: я пробовал с другими, proxySD, proxyRealm и оставил это поле пустым
  • Превентивная аутентификация. Я объединил все вышеперечисленные значения «Домена» с «Использовать глобальные предпочтения» и «Профилактическая проверка подлинности».

Во всех случаях я получаю

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <soap:Fault>
       <faultcode>soap:Server</faultcode>
       <faultstring>WFLYEJB0364: Invocation on method: public es.ssib.otic.test.prototipoEjbCitas.beans.PacienteCitaResponse es.ssib.otic.test.prototipoEjbCitas.impl.ApiCitasPublicoImpl.getPacienteCita(es.ssib.otic.test.prototipoEjbCitas.beans.IdPeticion) of bean: ApiCitasPublicoImpl is not allowed</faultstring>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

Если я удалю конфигурацию безопасности, я смогу получить доступ через SoapUI без проблем.

Работа с WildFly 14.0.0.1 Final.

Примечание. Этот вопрос в некоторой степени связан с моим предыдущим , но, поскольку я переустанавливал wildfly и шаг за шагом следовал вышеупомянутому учебнику, я думаю, что лучше опубликовать его как отдельный вопрос.

<Ч />

Обновление

Следуя ответу @ fjuma, я настроил следующее:

[standalone @ localhost: 9990 /] / subsystem = elytron / http-authentication-factory = proxy-application-http-authentication: добавьте (http-сервер-механизм-фабрика = глобальный, security-domain = proxySD, механизм- конфигурации = [{имя-механизм = BASIC, mechanims-область-конфигурации = [{имя-область = proxyAD}]}])
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = undertow / application-security-domain = proxyAD: add (http-аутентификация-фабрика = proxy-application-http-аутентификация)
{"исход" => "успех"}

И изменив значение security-domain в jboss-app.xml на proxyAD, я получаю ошибку при развертывании уха:

{
"WFLYCTL0412: Обязательные службы, которые не установлены:" => ["jboss.security.security-domain.proxyAD"],
"WFLYCTL0180: Службы с отсутствующими / недоступными зависимостями" => [
"jboss.deployment.subunit. \" prototipoEarCitas-0.0.1-SNAPSHOT.ear \ ". \" prototipoEjbCitas-0.0.1-SNAPSHOT.jar \ ". component.ApiCitasPublicoImpl.CREATE отсутствует [jboss.security.security-domain .proxyAD]»,
"jboss.ws.endpoint. \" prototipoEarCitas-0.0.1-SNAPSHOT.ear \ ". \" prototipoEjbCitas-0.0.1-SNAPSHOT.jar \ ". Отсутствует ApiCitasPublicoImpl [jboss.security.security-domain.proxyAD]]"
]
}

1 Ответ

0 голосов
/ 09 января 2019

Пара вещей на заметку:

  • Для использования HTTP Basic-аутентификации необходим Elytron http-authentication-factory. Документация о том, как настроить это, может быть найдена здесь .

  • При использовании базовой аутентификации HTTP также необходимо добавить отображение application-security-domain в подсистеме Undertow. См. https://developer.jboss.org/thread/276445 для получения дополнительной информации об этом при использовании веб-сервисов.

<ч />

Обновление по OP:

Это последний минимальный набор команд для настройки доступа к EJB через WS (протестирован на чистой, совершенно новой Wildfly 14.0.1. Final):

C: \ wildfly-14.0.1.Final \ Bin> JBoss-cli.bat
Вы отключены в данный момент. Введите «connect» для подключения к серверу или «connect» help 'для списка поддерживаемых команд.
[отключено /] подключить

[standalone @ localhost: 9990 /] /subsystem=elytron/properties-realm=proxyRealm:add(groups-attribute=groups,groups-properties= averagepath=proxy-roles.properties,relative-to=jboss.server .config.dir}, пользователи-свойство = {путь = proxy-users.properties, по отношению к = jboss.server.config.dir, простой текст = True})
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / security-domain = proxySD: add (realms = [{realm = proxyRealm, ролевой декодер = groups-to-role}], default-realm = proxyRealm, разрешение-картограф = по умолчанию, разрешение-картограф)
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / http-authentication-factory = proxy-http-auth: add (http-сервер-механизм-фабрика = глобальный, security-domain = proxySD, механизм-конфигурации = [{имя-механизма = BASIC, механизм-Холдинговые-конфигурации = [{имя-область = proxyRealm}]}]
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = undertow / application-security-domain = proxySD: добавить (http-authentication-factory = proxy-http-auth)
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = elytron / sasl-аутентификация-фабрика = proxy-app-sasl-auth: добавить (механизм-конфигурации = [{механизм-имя = JBOSS-LOCAL-USER, realm- картостроитель = локальная}, {механизм имя = BASIC, механизм-Холдинговые-конфигурации = [{имя-область = proxyRealm}]}], SASL-сервер-завод = сконфигурировано, безопасность домен = proxySD)
{"исход" => "успех"}

[standalone @ localhost: 9990 /] / subsystem = ejb3 / application-security-domain = proxySD: добавить (security-domain = proxySD)
{"исход" => "успех"}

Примечания:

  1. Как вы могли заметить, я переключился с области FileSystem на область Properties. Это не связано с проблемой, просто это облегчает отладку.

  2. Домен безопасности Elytron (определенный в 3-й команде), домен безопасности приложения Undertow (определенный в 4-й команде) и домен приложения EJB-безопасности (определенный в 6-й команде) имеют одно и то же имя proxySD , Важно, чтобы имя было одинаковым во всех трех подсистемах, и плохие вещи могут произойти, если у них разные имена (я не опробовал все комбинации).

  3. WS, основанный на EJB, должен вызываться с «аутентификационным преимуществом», посылая данные аутентификации в первом запросе без запроса от сервера. WS, основанные на POJO в войне, используют систему аутентификации для веб-страниц, поэтому нет необходимости в аутентификации превентивно.

...