问题标签 [elytron]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
516 浏览

wildfly - 使用 Elytron 保护 WildFly 数据源配置中的凭据

我正在 WildFly 14 中从旧版安全子系统切换到 Elytron。

特定数据源正在使用带有自定义登录模块的旧版安全域。使用用户名和编码密码调用自定义登录模块。自定义登录模块实现“org.picketbox.datasource.security.AbstractPasswordCredentialLoginModule”,其中解码的凭据在覆盖的提交方法中“返回”到框架。

由于不推荐使用旧版安全子系统,我想切换到使用 Elytron 并希望实现类似的凭据处理。我四处搜索,发现了一些关于创建指向自定义安全领域的 Elytron 安全域的讨论,其中自定义模块中的类将实现“org.wildfly.security.auth.server.SecurityRealm”。我还没有找到任何有效的例子,也无法弄清楚这一点。

有任何想法吗?

0 投票
1 回答
478 浏览

java - 将 Wildfly 14 双向 SSL 限制为特定客户端

我们正在为在 WildFly 14 应用服务器上运行的外部系统维护一个带有 JAX-WS SOAP API 的 Java 应用程序。外部系统当前使用通用单向 SSL 进行连接。我们的目标是将通信切换为相互身份验证,即双向 SSL。但是,并非所有外部系统都可以同时进行切换,因此简单地强制执行双向 SSL 不是一种选择。我们需要在过渡阶段逐步迁移它们。这就是我一直想知道的原因:是否有可能在 WildFly HTTPS 接口上仅为特定调用方 IP 启用双向 SSL?

我的测试基于关于设置常规双向 SSL 的官方文档。按照这些步骤,每个调用者都需要提供客户端证书。修改该示例配置以使用want-client-auth而不是need-client-auth软化检查以支持双向 SSL,但不需要它。不幸的是,在我们的案例中这还不够,因为它并不意味着特定外部系统是否始终使用双向 SSL 的保证。系统可以发送一些提供客户端证书的请求,而另一些则不发送。换句话说,业务需要一种方式来说明“从今天开始,外部系统Foo只能使用带有客户端证书的 API。所有其他外部系统暂时不受影响。”

为了实现这一点——最好不要更改应用程序代码——我一直在阅读新的 WildFly 安全模块 Elytron的文档。它看起来很可扩展,但是关于自定义组件的细节很少,而且我还没有找到一个听起来对我有帮助的扩展点。

我现在唯一的解决方案是为 Wildfly 配置一组单独的套接字绑定和 https-listener,类似于此处描述的内容。这意味着我们将有两个 HTTPS 端口:一个带有单向 SSL,另一个带有强制性双向 SSL。随着外部系统完成迁移步骤,它们会切换用于调用我们 API 的端口。从那时起强制他们只使用双向 SSL 端口将需要特定的防火墙规则,但应该是可能的。

因此,该解决方案在技术实现上相当简单,但会导致重新配置外部系统和调整防火墙规则的开销。这就是为什么我会对任何关于更优雅的解决方案的建议或提示如何使用 Elytron 的建议感到高兴。提前致谢!

0 投票
1 回答
973 浏览

wildfly - 配置安全性以通过 WS 访问 EJB -- 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-roles-attribute:add(attribute=Roles)
{"结果" => "成功"}

[standalone@localhost:9990 /] /subsystem=elytron/security-domain=proxySD:add(default-realm=proxyRealm,permission-mapper=default-permission-mapper,realms=[{realm=proxyRealm,role-decoder=from -roles-attribute},{realm=local}])
{"结果" => "成功"}

[standalone@localhost:9990 /] /subsystem=elytron/sasl-authentication-factory=proxy-application-sasl-autentication:add(mechanism-configurations=[{mechanism-name=JBOSS-LOCAL-USER,realm-mapper=local },{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=proxyRealm}]},{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=proxyRealm}] }],sasl-server-factory=configured,security-domain=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(name=sasl-authentication-factory,value=proxy-application-sasl-autentication)
{“结果”= >“成功”,“响应头”=> {“操作要求重新加载”=>真,“进程状态”=>“重新加载要求”}}

在 mi EJB 中,我有

而我jboss-app.xml的是

耳朵正确部署并且它没有显示任何日志问题,但我尝试从 SoapUI 访问一个方法并添加一个基本身份验证,其中:

  • 用户名:ejbuser
  • 密码:12345678
  • 域:我尝试过使用其他 proxySD、proxyRealm 并将其留空
  • 抢先验证:我已将“域”的所有上述值与“使用全局首选项”和“抢先验证”结合起来。

在所有情况下,我都会得到一个

如果我删除安全配置,我可以毫无问题地通过 SoapUI 访问。

使用 WildFly 14.0.0.1 Final。

注意:这个问题与我之前的问题有些相关,但是由于我已经重新安装了wildfly并且我已经按照上面提到的教程一步一步地进行操作,所以我认为最好将它作为一个单独的问题发布。


更新

按照@fjuma的回答,我配置了以下内容:

[standalone@localhost:9990 /] /subsystem=elytron/http-authentication-factory=proxy-application-http-authentication:add(http-server-mechanism-factory=global,security-domain=proxySD,mechanism-configurations=[ {mechanism-name=BASIC,mechanims-realm-configuration=[{realm-name=proxyAD}]}])
{"结果" => "成功"}

[standalone@localhost:9990 /] /subsystem=undertow/application-security-domain=proxyAD:add(http-authentication-factory=proxy-application-http-authentication)
{"结果" => "成功"}

security-domain并将in的值更改jboss-app.xmlproxyAD,部署耳朵时出现错误:

{
"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]"
]
}

0 投票
1 回答
1242 浏览

java - Wildfly 安全子系统:从 Legacy 迁移到 Elytron,未找到安全域

我正在尝试将项目从使用 Legacy Security 迁移到使用 Elytron Security。

到目前为止(旧版),身份验证工作所需的全部内容是在 Subsystems -> Security 中创建一个具有正确名称的安全域(“ referencesApplicationDomain ”)。

我的 web.xml:

我的 jboss-web.xml:

当然,我们的想法是让我们的应用程序只与 Elytron 一起工作。

但是,问题是,我看不到在 Elytron 中创建安全域的位置。

我按照Wildfly Elytron 文档使用 jboss-cli 创建了安全域和 http 工厂。

当我签入 jboss-cli 时,我看到安全域已创建。

但是,当我尝试启动 Wildfly 服务器时,出现以下错误:

似乎 jboss 正试图在旧的安全子系统而不是 Elytron 中找到安全域。但我不明白为什么?

小备注:我想使用ApplicaationRealm,来使用jboss配置文件里面的用户和组。

0 投票
1 回答
626 浏览

java - Wildfly (12/14) Elytron - LDAP 安全性 - 缺少依赖项

我正在努力将 Wildfly 12/14 Elytron Ldap 身份验证机制引入我的两个 webapps 应用程序。

虽然我已经按照 Wildfly 文档中的步骤通过 jboss-cli.sh 成功部署了 DirContext、LdapRealm、SecurityDomain 等,但当我<security-domain>在“WEB-INF/jboss-web.xml”中添加标签并启动容器时,我收到以下错误:

注意:即使将“standalone.xml”日志级别设置为 TRACE,有关此的唯一信息是上述行。

jboss-cli.sh用于实现 Elytron 安全子系统的顺序命令是:

jboss-web.xml和文件都web.xml定义如下:

jboss-web.xml:

网页.xml:

我错过了什么?

0 投票
0 回答
159 浏览

java - 使用 Subject.doAs 运行 EJB 不会影响 Wildfly 15 中的 EJBContext

由于我们发现无法按照此处所述将 SecurityIdentity 放入 ContextualProxy 中,因此我们尝试找到某种解决方法。

我们在 wildfly 的安全子系统上进行编程登录,并使用返回的 Subject 运行 Runnable。然后,runnable 应该能够根据主题的角色运行某些 EJB,但 EJBContext 或 SessionContext 始终是“匿名的”。

代码:

登录

从 mdb 调用:

可运行:

单身人士:

登录工作得很好,我总是从主体那里得到正确的名字,但是 ejbcontext 和 sessioncontext 总是“匿名的”。我的猜测是,wildfly 的遗留安全系统不再与 ejb 容器“连接”,因为将使用 Elytron。

有没有办法来解决这个问题?

我也尝试使用此处描述的 Elytron 系统,但结果相同:

请询问您是否需要更多代码或信息

0 投票
1 回答
1372 浏览

java - 使用 Elytron 的 WildFly 和 Java EE 安全配置

我正在尝试更加熟悉 WildFly 安全配置,并且在理解服务器端配置(如 和 )中的选项之间的关系时遇到了一些standalone.xml问题。web.xmljboss-web.xml

我有几个关于这个基于 Wildfly servlet 安全示例的配置的问题。我已经尝试过了,它可以工作,但有几件事对我来说还不清楚。

  1. 我如何看待身份验证的基本类型是在服务器端的身份验证工厂和应用程序端的 web.xml 中定义的。哪个优先。是不是必须申报两次。
  2. 领域“RealmUsersRoles”的名称。它是否意味着服务器端配置和 web.xml 中的同一实体
  3. 在理想情况下,我想了解此配置中提到的所有安全实体之间的互连。

这是 JBoss CLI 配置脚本

web.xml

jboss-web.xml

这是我用作基础的 Wildfly 示例的链接https://github.com/wildfly/quickstart/tree/master/servlet-security

这是我基于此示例的所有代码,并进行了一些修改https://github.com/usharik/GeekBrainsJavaEE/tree/master/lesson8-security

0 投票
0 回答
185 浏览

ejb - 如何对具有 Wildfly elytron 安全性的 ejb 远程客户端使用 keycloak 身份验证?

我有一些 web 应用程序,它验证Keycloak并调用EJBs. Wildfly配置了安全性,Elytron并且安全性上下文在 Web 和 EJB 之间正确传播。

现在我要编写一个 java 客户端(桌面应用程序),它必须使用 Wildfly http+remoting 在服务器上调用相同的 EJB。我想我需要在 Wildfly 上配置SASL针对 Keycloak 的身份验证,可能使用oauthJava 客户端使用 Keycloak 登录获得的不记名令牌。

我找不到有关如何在 Wildfly 上使用 Keycloak 配置 SASL 的任何信息。有人对此有所了解吗?

0 投票
0 回答
132 浏览

wildfly - Wildfly 16 Elytron Keycloak 设置

我正在尝试使用 Elytron 和 Keycloak 保护部署在 Wildfly 16 上的 ejb,以便从 Java swing 前端访问。我在网上查了一下,没有找到任何具体的例子来说明如何做到这一点。谁能帮忙展示standalone.xml config和wildfly-config。我已经按照 Keycloak 文档中的说明安装了 Keycloak 适配器。

0 投票
1 回答
1787 浏览

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

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

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

我的第一次尝试是在 Elytron 中使用自定义领域。但据我了解,自定义领域需要是“静态”模块(意味着它位于 wildfly/modules/... 下),因此无法访问“动态”部署的模块(请参阅https://developer.jboss .org/message/984198#984198)。

(我省略了更多的安全域配置)

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

这并不奇怪,因为我的领域不依赖于应用程序上下文所在的耳朵或其中的任何罐子。

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