问题标签 [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.
realm - 如何在 Elytron Wildfly 17 中使用 jdbc 领域对用户进行身份验证?
我一直在研究 Wildfly 17 Elytron。我已经使用这些 jboss-cli 和以下命令对其进行了配置。
Ejb代码
web.xml
我希望这段代码能够使用 JDBC 测试领域进行验证。但它使用基于文件的默认领域进行 ejb 验证。
configuration - 在 JBoss 7.1.6 GA 中加密 bindCredential
我正在努力将密码迁移到 Elytron 安全框架。我几乎完成了所有任务,但是我根本找不到或弄清楚,我该如何迁移
<module-option name="bindCredential" value="secret_value"/>
模块到它。我在 Stack 的某个地方看到,我可以使用密码库,但总体思路是将所有内容移至 elytron。任何提示如何实现这一点?
wildfly - 无法在 WildFly 20 中使用 Jakarta EE 8 安全性
我试图通过在 CDI Bean 中定义BasicAuthenticationMechanismDefinition在我的应用程序中使用 Jakarta EE 8 Security:
我使用的领域是 Elytron 中定义的 FileSystemRealm。接下来,我在端点中指定了允许的角色:
我添加了以下依赖项来在 WildFly 20 上构建和部署应用程序:
请求安全资源时,返回以下错误:
我是否错过了我的应用程序中的任何依赖项?或者可能是 glassfish.soteria 依赖的错误版本?
非常感谢任何帮助谢谢
java - 使用 Wildfly Elytron 安全的程序化登录
我正在将一些遗留应用程序从 Jboss AS 6 迁移到 Wildfly。由于不推荐使用旧的(纠察队)安全系统,我想切换到使用 elytron。我遵循了快速入门示例,我认为我的配置设置正确,但是在迁移我的实际代码时遇到了问题。
有时我们希望直接授权用户,而不是依赖来自客户端或 servlet 的调用。这在我们想要测试需要特定权限的 ejb 方法的集成测试中尤其重要。目前,我进行手动授权的登录方法如下所示:
当我尝试使用 elytron 子系统中定义的安全域调用该方法时,它失败了。通过代码进行调试,我可以看到 LoginContext 没有看到来自 elytron 的任何安全域。只有遗留 (jboss.as:security) 域是可见的,所以它默认为“其他”的安全域。
有什么办法可以用 elytron 做我想做的事吗?
仅供参考,以下是我的配置中的一些片段:
独立的.xml:
jboss-web.xml:
网页.xml:
java - Wildfly 16:jboss-web.xml 中指定的安全域被忽略
运行 Wildfly 16,我在应用程序的 WEB-INF/jboss-web.xml 中指定了一个安全域,如下所示:
在 Wildfly 的standalone.xml 的 undertow 部分中,我将该安全域指定为应用程序安全域,如下所示:
接下来,在 elytron 部分中,我指定安全域,如下所示:
当然,随后也定义了 OAuth2Realm,Wildfly 毫无怨言地开始了。但是,当通过 http 访问应用程序时,Wildfly 总是在 legacy 安全部分使用安全域“other”,而不是在 elytron 部分使用我的安全域。如何强制 Wildfly 使用我的 Elytron 安全域?
wildfly - Elytron 中的散列密码(simple-digest-mapper)
我正在将 Wildfly22 与 java EJB 客户端一起使用,并成功地让客户端使用具有单独域和 jdbc-realm 的 elytron 登录。
但是,我目前不得不在数据库中使用普通密码,这显然不利于生产。
我尝试使用 base64 和 md5 对它们进行哈希处理,并使用简单的摘要映射器:
但是现在我得到了 ELY05051:回调处理程序不支持凭证获取。
我认为这里更大的问题是我对客户端演示代码之间的关系缺乏了解:
以及数据库中的密码存储格式。重申一下,当我使用 clear-password-mapper 时,一切正常。
对此的任何帮助表示赞赏。
jboss - 使用 FORM 身份验证的 Elytron 编程登录
我们目前正在从遗留安全子系统迁移到 Elytron,并在 JBoss EAP 7.3.6 中部署了一个基于 Struts2 的 Web 应用程序,它应该支持多种“风格”的身份验证。
登录的标准方式应该是用户在登录表单 ( j_security_check
) 中手动提供凭据并单击相应的按钮。这适用于我们的设置中的 Elytron。
第二种可能性是,对 Web 应用程序的受保护内容的 GET 请求可以包含一个包含 JWT 令牌的自定义 cookie。io.undertow.server.HttpHandler
这个 cookie 被在其io.undertow.server.HttpHandler#handleRequest
方法中处理传入请求的 a 拦截。此处理程序由io.undertow.servlet.api.DeploymentInfo#addSecurityWrapper
的DeploymentInfo
实现提供的注册io.undertow.servlet.ServletExtension
。已在ServletExtension
中注册为服务提供者META-INF/services/io.undertow.servlet.ServletExtension
。
我们实现中的请求处理io.undertow.server.HttpHandler#handleRequest
从 cookie 中提取 JWT 令牌,对其进行预验证并确定包含的用户名。此用户名和作为密码的令牌用作调用的输入javax.servlet.http.HttpServletRequest#login
。
对于旧版安全子系统,服务器的行为是,此登录调用触发了针对配置的旧版安全域的身份验证,并在 Undertow 中创建了一个会话,因此前一个 GET 请求的 HTTP 200 响应包含一个Set-Cookie
带有新的标头JSESSIONID
曲奇饼。
使用 Elytron,javax.servlet.http.HttpServletRequest#login
不会执行任何操作,既不会触发针对 Elytron 安全域和安全域的身份验证,也不会触发会话的创建。浏览器只显示登录表单,所述拦截过程应跳过该表单。
我调试了javax.servlet.http.HttpServletRequest#login
JBoss 附带的实现。我们从io.undertow.servlet.spec.HttpServletRequestImpl#login
which calls开始login = sc.login(username, password)
。这SecurityContext
在使用 Elytron 时是org.wildfly.elytron.web.undertow.server.SecurityContextImpl
. org.wildfly.elytron.web.undertow.server.SecurityContextImpl#login
首先检查if (httpAuthenticator == null)
。httpAuthenticator
是唯一org.wildfly.elytron.web.undertow.server.SecurityContextImpl#authenticate
一个被调用调用的集合javax.servlet.http.HttpServletRequest#authenticate
。
这就解释了为什么一个简单的调用io.undertow.servlet.spec.HttpServletRequestImpl#login
什么都不做。我尝试先调用javax.servlet.http.HttpServletRequest#authenticate
,在内部实例化它httpAuthenticator
,然后javax.servlet.http.HttpServletRequest#login
. 这至少最终触发了针对配置的 Elytron 安全域和安全域的身份验证和授权。身份验证/授权成功,但 Undertow 仍然没有发出新的JSESSIONID
cookie,浏览器再次显示登录表单,而不是继续访问受保护的资源。
我目前没有想法,如何处理这个问题以及如何实现与遗留安全子系统相同的行为。为什么 Elytron 的实现io.undertow.security.api.SecurityContext
与旧版安全 ( io.undertow.security.impl.SecurityContextImpl
) 的行为如此不同?我应该如何使用 Elytronjavax.servlet.http.HttpServletRequest#login
和/或以编程方式登录基于 FORM 的 Web 应用程序javax.servlet.http.HttpServletRequest#authenticate
?
所有这些的相关 JBoss 配置如下所示:
暗流:
爱丽创:
session - JAAS j_security_check 会话 ID 更改和 JBOSS/Wildfly 迁移
我正在将 Jboss 4 应用程序迁移到 Wildfly 23。有许多自定义登录模块可以使用旧版域进行迁移。登录模块的部分功能是将会话 ID 保存到数据库中。然后它 302 从 j_security_check 重定向到另一个页面,并且应用程序查询表以检查登录用户的请求 sessionId 是否存在于数据库中。
迁移到 wildfly 后,j_security_check 设置一个新的 sessionId 作为 302 重定向的一部分。以前不是这种情况。这当然打破了 sessionID 在以下请求中与数据库中匹配的期望。
作为迁移的一部分,我是否需要配置一些我错过的东西?从自定义登录模块中保留 sessionID 的功能不是正确的做事方式吗?我对 JAAS/JBoss/Wildfly 和这个应用程序很陌生。在应用程序完全迁移之前,不希望进行重大更改。有什么想法可以实现与在未迁移的应用程序中看到的相同的行为吗?
active-directory - LDAP 中的 Wildfly Elytron 动态组
我可以将 Wildfly Elytron 配置为从 Active Directory 中的 memberOf 属性(即来自动态组)获取用户角色吗?
问题和样本完全一样
不幸的是,给定的解决方案不适用于 Elytron。
wildfly - WildFly Elytron 用于管理多个领域的身份验证
我正在尝试将 WildFly Elytron 配置为允许在管理界面上使用两个具有后备功能的不同领域进行身份验证。
例如,我有一个我想使用的ManagementRealm
和一个。MyLDAPRealm
如果用户在 中被识别ManagementRealm
,用户应该可以访问管理界面。如果没有,我想试试MyLDAPRealm
. 如果这次用户被识别,他应该可以访问管理界面。如果没有,它应该会失败。一个简单的后备。
我更新了standalone.xml
配置以使用 Elytron,但它目前无法正常工作,并且文档没有像希望的那样提供帮助。目前我有以下配置位。
管理界面正在使用我要配置的身份验证工厂:
身份验证工厂链接到我将更新的管理域:
我更新的管理域包括了一个额外的领域:
使用此配置,如果用户在 中,则通过身份验证并允许进入,ManagementRealm
但如果在MyLDAPRealm
.
这种配置是可能的还是我在 Elytron 链中遗漏了什么?