Wildfly 17 Elytron: аутентификация на стороне сервера с классами из EAR - PullRequest
0 голосов
/ 21 июня 2019

Мы планируем перейти с Picketbox на Elytron и столкнемся со следующей проблемой:

С Picketbox пользовательский модуль входа в систему может использовать функциональность (или даже может находиться в) модуля развертывания (например, EAR в wildfly / standalone / deployments) для реализации аутентификации на стороне сервера:

<subsystem xmlns="urn:jboss:domain:security:2.0">
    <security-domains>
        ...
        <security-domain name="MyDomain" cache-type="default">
            <authentication>
                <login-module name="MyLoginModule" code="de.example.wildfly.MyLoginModule" flag="required" module="deployment.de.example.wildfly.login"/>
            </authentication>
        </security-domain>

Моей первой попыткой было использование пользовательского царства в Elytron. Но, насколько я понимаю, пользовательская область должна быть «статическим» модулем (то есть она находится в wildfly / modules / ...) и поэтому не может получить доступ к «динамически» развернутым модулям (см. https://developer.jboss.org/message/984198#984198).

<subsystem xmlns="urn:wildfly:elytron:7.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
    ...
    <security-domains>
        <security-domain name="MyDomain" default-realm="MyRealm" permission-mapper="default-permission-mapper">
            <realm name="MyRealm" role-decoder="from-roles-attribute" />
        </security-domain>
    </security-domains>
    <security-realms>
        ...
        <custom-realm name="MyRealm" module="de.example.wildfly.login" class-name="de.example.wildfly.MyCustomRealm" />

(я пропустил еще несколько настроек домена безопасности)

Когда я пытаюсь загрузить контекст Spring (который находится в EAR для доступа к некоторым пользовательским классам из EAR) в MyCustomRealm, я получаю следующую ошибку:

org.springframework.beans.factory.access.BootstrapException: Unable to initialize group definition. Group resource name [classpath:applicationContext-appServerBase.xml], factory key [applicationContextEjb]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext-appServerBase.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationContext-appServerBase.xml] cannot be opened because it does not exist

Что неудивительно, потому что моя сфера не зависит от уха или какой-либо банки оттуда, где находится контекст приложения.

Как настроить аутентификацию (особенно для вызовов EJB) на стороне сервера, используя классы из модуля развертывания (EAR) в Elytron?

1 Ответ

0 голосов
/ 19 июля 2019

Может быть https://github.com/AntonYudin/wildfly-securityrealm-ejb это именно то, что вы ищете. Он создает SecurityRealm, который можно настроить с помощью адреса EJB, развернутого с вашим приложением.

EJB должен быть Stateless и должен реализовывать метод Map<String, Object> authenticate(String, String), который вызывается с username и password.

Полагаю, вам нужно вернуть карту, которая содержит все roles и groups, к которым принадлежит пользователь, или null, если учетные данные недействительны.

...