Настройка безопасности для доступа к EJB через WS - WFLYEJB0364 Соединение отклонено

Я следовал этому руководству, чтобы настроить пользователя 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: set-password (identity = ejbuser, clear = {password = 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, access-mapper = default -missions-mapper,realms=[{realm=proxyRealm,role-decoder=from-roles-атрибут},{сфера = локальная}])
{"исход" => "успех"}

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

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

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

В ми 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-аутентификация-фабрика = прокси-приложение-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 ответ

Решение

Несколько вещей, чтобы отметить:

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

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


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

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

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

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

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

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

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

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

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

Заметки:

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

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

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

Другие вопросы по тегам