Wildfly 26.1.0 Final + elytron-oidc-client + 不会将用户传播到 EJB + 用户变为匿名

2023-12-29

我正在尝试从 WF24 升级到 WF26.1.0 Final 并从 jboss:domain:keycloak 模块迁移到 elytron-oidc-client。

我已经安装了 WF26.1.0 并使用安全部署配置了 elytron-oidc-client 以使用我们的 Keycloak 服务器进行身份验证。我可以登录我的网页并使用 WAR 部署提供的休息服务,并且获得为我的 keycloak 用户列出的正确角色。

以下是显示 elytron-oidc-client 何时检索经过身份验证的用户并将其添加到具有“虚拟”领域的通用安全域的日志:

2022-05-01 06:46:10,652 TRACE [org.wildfly.security] (default task-4) Handling SecurityIdentityCallback: identity = SecurityIdentity{principal=testuser, securityDomain=org.wildfly.security.auth.server.SecurityDomain@3e51905b, authorizationIdentity=EMPTY, realmInfo=RealmInfo{name='virtual', securityRealm=org.wildfly.security.http.oidc.OidcSecurityRealm@796ef014}, creationTime=2022-05-01T04:46:10.651489Z}

安全部署在standalone-full.xml 中如下所示:

<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
                <realm name="MyRealm">
                    <auth-server-url>https://127.0.0.1/auth/</auth-server-url>
                    <ssl-required>NONE</ssl-required>
                    <enable-cors>true</enable-cors>
                    <principal-attribute>preferred_username</principal-attribute>
                </realm>
                <secure-deployment name="farm-application-fleet-jsweb.war">
                    <realm>MyRealm</realm>
                    <resource>MyResource</resource>
                    <public-client>true</public-client>
                </secure-deployment>
                 
            </subsystem>

当 WAR 中部署的 REST 服务尝试连接到不同 EAR 中部署的 EJB 时,用户将变为“匿名”并且不允许访问。

以下是我的一些 Wildfly 日志,显示当我调用如下声明的 EJB 方法 getAllMvaCodes 时,经过身份验证的用户变为匿名:

@RolesAllowed({ "user","appuser" })
public GeneralResponse getAllMvaCodes () {....}

我得到的不是正确的结果,因为经过身份验证的用户具有正确的角色,而是“不允许”:

2022-05-01 06:46:10,651 TRACE [org.wildfly.security] (default task-4) Role mapping: principal [testuser] -> decoded roles [appuser, workshop, car_booking, plowing, superadmin, triplog, admin, transport, user] -> domain decoded roles [] -> realm mapped roles [appuser, workshop, car_booking, plowing, superadmin, triplog, admin, transport, user] -> domain mapped roles [appuser, workshop, car_booking, plowing, superadmin, triplog, admin, transport, user]

2022-05-01 06:46:10,651 TRACE [org.xnio.nio.selector] (default I/O-19) Selected key channel=java.nio.channels.SocketChannel[connected local=/127.0.0.1:8443 remote=/127.0.0.1:49577], selector=sun.nio.ch.KQueueSelectorImpl@db86f05, interestOps=1, readyOps=1 for java.nio.channels.SocketChannel[connected local=/127.0.0.1:8443 remote=/127.0.0.1:49577]

2022-05-01 06:46:10,651 TRACE [org.wildfly.security] (default task-4) Authorizing principal testuser.

2022-05-01 06:46:10,651 TRACE [org.xnio.nio.selector] (default I/O-19) Calling handleReady key 1 for java.nio.channels.SocketChannel[connected local=/127.0.0.1:8443 remote=/127.0.0.1:49577]

2022-05-01 06:46:10,651 TRACE [org.wildfly.security] (default task-4) Authorizing against the following attributes: [Roles] => [appuser, workshop, car_booking, plowing, superadmin, triplog, admin, transport, user]

2022-05-01 06:46:10,651 TRACE [org.xnio.listener] (default I/O-19) Invoking listener io.undertow.server.protocol.framed.AbstractFramedChannel$FrameReadListener@6a65085c on channel org.xnio.conduits.ConduitStreamSourceChannel@734aed38

2022-05-01 06:46:10,651 TRACE [org.wildfly.security] (default task-4) Authorizing against the following runtime attributes: [] => []

2022-05-01 06:46:10,651 TRACE [io.undertow.request.io] (default I/O-19) Invoking receive listener: io.undertow.server.protocol.http2.Http2ReceiveListener@226d75b6 - receiver: null

2022-05-01 06:46:10,651 TRACE [org.wildfly.security] (default task-4) Permission mapping: identity [testuser] with roles [appuser, workshop, car_booking, plowing, superadmin, triplog, admin, transport, user] implies ("org.wildfly.security.auth.permission.LoginPermission" "") = true

2022-05-01 06:46:10,651 TRACE [org.wildfly.security] (default task-4) Authorization succeed

2022-05-01 06:46:10,651 TRACE [org.xnio.listener] (default I/O-19) Invoking listener io.undertow.server.protocol.http2.Http2ReceiveListener@226d75b6 on channel Http2Channel peer /127.0.0.1:49577 local /127.0.0.1:8443[ No Receiver [] -- [] -- []

2022-05-01 06:46:10,651 ERROR [org.jboss.as.ejb3.invocation] (default task-6) WFLYEJB0034: Jakarta Enterprise Beans Invocation failed on component InvoiceBean for method public abstract no.farm.service.fleet.dto.GeneralResponse no.farm.service.fleet.ejb.InvoiceRemote.getAllMvaCodes(): javax.ejb.EJBAccessException: WFLYEJB0364: Invocation on method: public abstract no.farm.service.fleet.dto.GeneralResponse no.farm.service.fleet.ejb.InvoiceRemote.getAllMvaCodes() of bean: InvoiceBean is not allowed

有没有一种方法可以配置 Wildfly 将用户从 WEB 正确传播到 EJB?


The elytron-oidc-client子系统利用虚拟安全域。目前,其他部署无法引用此虚拟安全域。

但是,该身份将传播到同一部署中的 EJB。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wildfly 26.1.0 Final + elytron-oidc-client + 不会将用户传播到 EJB + 用户变为匿名 的相关文章

随机推荐