Wildfly 17 Elytron:使用EAR中的类进行服务器端身份验证

时间:2019-06-21 09:02:44

标签: authentication ejb wildfly elytron

我们计划从Picketbox迁移到Elytron,并面临以下问题:

使用Picketbox,自定义登录模块可以使用(甚至可以驻留在)部署模块中(例如,在wildfly / standalone / deployments中的EAR)来在服务器端实现身份验证:

<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" />

(我省略了一些安全域配置)

当我尝试在MyCustomRealm中加载Spring上下文(位于EAR中以便从EAR访问某些自定义类)时,出现以下错误:

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

这并不奇怪,因为我的境界不依赖于耳朵或应用上下文位于其中的任何罐子。

如何使用Elytron中的部署模块(EAR)中的类在服务器端自定义身份验证(特别是针对EJB调用)?

1 个答案:

答案 0 :(得分:0)

也许https://github.com/AntonYudin/wildfly-securityrealm-ejb正是您想要的。 它会创建一个df['B'] = df.groupby('A')[df['B' == NaN].mean(df['A']) ,可以使用与您的应用程序一起部署的EJB的地址进行配置。

EJB必须是DATA MAIZ; INPUT x y; CARDS; DATOS PROC NLIN METHOD=GAUSS; PARAMETERS =-8201.59, =2129.57 =-88.75 a=0.5; MODEL y= + *x**a + *x**(2*a); DER. =1; DER. =x**a; DER. =x**(2*a); DER.a= *x**a*LOG(x) +2* *x**(2*a)*LOG(x); RUN; ,并且必须实现SecurityRealmStateless调用的方法Map<String, Object> authenticate(String, String)

我想您必须返回一个包含所有用户所属的usernamepassword或如果凭据无效的roles的地图。