2.6. Elytron 子系统


JBoss EAP 7.1 中引入了 elytron 子系统。它以 WildFly Elytron 项目为基础,该项目是一种安全框架,用于统一整个应用服务器的安全性。elytron 子系统启用单一配置,以同时保护应用和管理接口。WildFly Elytron 还提供一组 API 和 SPI,用于提供自定义功能实施并与 elytron 子系统集成。

此外,WildFly Elytron 还有一些其他重要功能:

  • 更强大的 HTTP 和 SASL 身份验证机制.
  • 改进的架构允许在 安全域 之间传播安全身份。这确保了可用于授权的透明转换。这种转换利用可配置的角色解码器、角色映射器和权限映射器进行。
  • SSL/TLS 配置的集中点,包括密码套件和协议。
  • SSL/TLS 优化,如及时 的安全智能 结构,以及建立 SSL/TLS 连接的紧密关联授权。近日 安全身份构建 消除了基于每个请求 构建安全 身份的需要。通过紧密关联身份验证来建立 SSL/TLS 连接,可以实现收到第一个请求的 BEFORE 权限检查。
  • 个安全的凭证存储,用于替换前面的 vault 实施来存储纯文本字符串。

新的 elytron 子系统与传统 安全 子系统和旧版核心管理身份验证并行存在。传统和 Elytron 方法都可用于保护管理接口,并为应用提供安全性。

重要

基于 PicketBox 的 Elytron 和传统安全子系统的架构截然不同。Elytron 曾尝试创建一个解决方案,允许您在当前运行的同一安全环境中运行;然而,这并不表示每个 PicketBox 配置选项在 Elytron 中都有等同的配置选项。

如果您无法在文档中找到信息以帮助您使用旧版安全实施时获得类似功能,则可以通过以下方法之一找到帮助:

2.6.1. 核心概念和组件

elytron 子系统架构和设计背后的概念是使用较小的组件来组合完整的安全策略。默认情况下,JBoss EAP 提供许多组件的实施,但 elytron 子系统也允许您提供专用的自定义实施。

在"elytron"子系统中的每个组件实施都以单独的能力进行处理。这意味着,可以使用不同的资源混合、匹配和建模不同的实施。

2.6.1.1. 功能和要求

功能是 JBoss EAP 中使用的一种功能,可通过管理层来公开。个功能可以依赖于其他功能,这种依赖关系由管理层进行调和。些功能由 JBoss EAP 自动提供,但运行时可用的全部功能都使用 JBoss EAP 配置来确定。管理层验证服务器启动以及进行任何配置更改时是否存在其他功能所需的所有功能。功能与 JBoss 模块和扩展集成,但它们都是不同的概念。

除了注册它依赖的其他功能外,一个功能还必须注册与这些功能相关的一组要求。能力可以指定以下类型的要求:

硬要求
能力依赖于其他功能,因此必须始终存在。
可选要求
功能的可选方面取决于另一能力,这些功能可以也可以启用。因此,在分析配置前无法确定或知道此要求。
仅运行时要求
能力将检查运行时是否存在所需的能力。如果存在所需的能力,则将使用它。如果没有所需的能力,将不会使用它。

您可以在 WildFly 文档中找到有关功能和要求的更多信息

2.6.1.2. API、SPI 和自定义实施

Elytron 提供一组安全 API 和 SPI,以便其他子系统和使用者可以直接使用它们,从而降低集成开销。尽管大多数用户将使用 JBoss EAP 提供的功能,但 Elytron API 和 SPI 也可供自定义实施用于替换或扩展 Elytron 功能。

2.6.1.3. 安全域

安全域是安全策略的表示形式,由一个或多个安全域以及一组执行转换的资源提供支持。安全域将生成 SecurityIdentitySecurityIdentity 由执行授权的其他资源使用,如应用。SecurityIdentity 是当前用户的表示,它基于原始 授权身份及其 关联的角色和权限。

您还可以配置安全域,以允许 Security Identity from other 安全域的内向。当身份 流化 时,它会保留其原始 授权Identity,并为它分配一组新的角色和权限,从而创建一个新的 SecurityIdentity

重要

部署仅限于在每个部署中使用一个 Elytron 安全域。现在,可以使用一个 Elytron 安全域来完成可能需要多个传统安全域的情况。

2.6.1.4. Security Realms

安全域提供对身份存储的访问,用于获取凭据。这些凭据允许身份验证机制获取用于执行身份验证的原始 授权Identity。它们还允许验证机制在验证证据时执行验证。

您可以将一个或多个安全域与一个安全域关联。些安全域实施也公开用于修改的 API,这意味着安全域可以对底层身份存储进行更新。

2.6.1.5. 角色解码器

角色解码器与安全域关联,用于解码当前用户的角色。角色解码器取从安全域返回的原始 AuthorizationIdentity,并将其属性转换为角色。

2.6.1.6. 角色映射器

角色映射器将角色修改应用到身份。这可以从对角色格式进行规范化,到添加或删除特定角色等。角色映射器可以与安全域和安全域关联。如果角色映射器与安全域关联,则角色映射将在安全域级别上应用,然后才会在安全域级别上应用任何转换(如角色解码或额外的角色映射)。如果角色映射器和其他转换(如角色解码器)都在安全域中配置,则在应用角色映射器之前执行所有其他转换。

2.6.1.7. 权限映射器

权限映射器与安全域关联,并为 SecurityIdentity 分配一组权限。

2.6.1.8. 主体转换器

主要的转换器可用于 elytron 子系统内的多个位置。主体转换器可以转换或将名称映射到另一个名称。

2.6.1.9. 主体 Decoders

首席解码器可用于 elytron 子系统内的多个位置。主体解码器将身份从 Principal 转换为名称的字符串表示。例如,X500PrincipalDecoder 允许您将 X500Principal X500Principal 从证书的可分辨名称转换为字符串表示。

2.6.1.10. realm Mappers

域映射器与安全域关联,在安全域配置了多个安全域时使用。域映射器也可以与 http-authentication -factory 和 sasl-authentication-factory 的机制 或机制域 相关联。域映射器使用身份验证期间提供的名称来选择用于身份验证的安全域,并获取原始 授权 IDdentity

2.6.1.11. 身份验证事实

身份验证工厂是身份验证策略的表示形式。身份验证与安全域、机制工厂和机制选择器相关联。安全域提供要身份验证的 SecurityIdentity,机制工厂提供服务器端身份验证机制,而机制选择器则用于获取特定于所选机制的配置。机制选择器可以包含有关域名称的信息,如应向远程客户端提供的机制,以及身份验证过程中要使用的其他主体转换器和域映射器。

2.6.1.12. KeyStores

key-store 是密钥 存储或信任存储的定义,包括密钥存储的类型、其位置以及用于访问它的凭据。

2.6.1.13. 密钥管理器

key-manager 引用 密钥 存储,并与 SSL 上下文结合使用。

2.6.1.14. 信任管理器

trust-manager 引用作为信任存储(在 密钥存储 中定义),它与 SSL 上下文一起使用,通常用于双向 SSL/TLS。

2.6.1.15. SSL 上下文

elytron 子系统中定义的 SSL 上下文是一个 javax.net.ssl.SSLContext,这意味着它可供直接使用 SSL 上下文的任何对象使用。除了 SSL 上下文的常规配置外,还可以配置其他项目,如密码套件和协议。SSL 上下文将嵌套所配置的任何其他项目。

2.6.1.16. 安全凭证存储

之前的用于纯文本字符串加密的 vault 实施已被新设计的凭证存储替代。除了保护它存储的凭据外,凭据存储还用于存储纯文本字符串。

2.6.2. Elytron 身份验证流程

可以在 elytron 子系统内定义多个主体转换器、域映射器和一个主体解码器。以下小节讨论这些组件在身份验证过程中是如何发挥作用的,以及如何将主体映射到适当的安全域。

当一个主体被验证时,它会按顺序执行以下步骤:

  1. 确定和配置适当的机制配置。
  2. 传入的主体映射到 SecurityIdentity 中。
  3. 此安全性 用于确定适当的安全域。
  4. 确定安全域后,主体会再次转换。
  5. 最终转换发生,允许特定机制的转换。

下图演示了左侧列中突出显示的这些步骤,以及显示各个阶段中使用的组件。

图 2.1. Elytron 身份验证流程

预域映射

在预域映射期间,经过身份验证的主体映射到 SecurityIdentity,该表单可以识别应使用哪个安全域,并且将包含表示身份验证信息的单个 Principal。主体转换程序和主体解码器按以下顺序调用:

  1. 机制 Realm - pre-realm-principal-transformer
  2. 机制配置 - 预域-principal-transformer
  3. 安全域 - 主体decoderpre-realm-principal-transformer

如果这个过程导致 null 主体,则会抛出错误并终止身份验证。

图 2.2. 预域映射

域名称映射

获取映射的主体后,将识别将用于加载身份的安全域。此时,realm 名称是由安全域定义的名称,也不是安全域的机制域名称。该配置会按照以下顺序查找安全域名:

  1. 机制 Realm - 域映射器
  2. 机制配置 - realm-mapper
  3. 安全域 - realm-mapper

如果 RealmMapper 返回 null,或者没有可用的映射器,则将使用安全域中的 default-realm

图 2.3. 域名称映射

安装后映射

在确定了某个领域后,主体将经历另一轮转换。转换器按以下顺序调用:

  1. 机制 Realm - 后域后转换器
  2. 机制配置 - 域后-principal-transformer
  3. 安全域 - realm-principal-transformer

如果这个过程导致 null 主体,则会抛出错误并终止身份验证。

图 2.4. 安装后映射

最终主要转换

最后,进行最后一类主要转换,允许特定机制的转换在特定领域转换前后应用。如果此阶段不需要,则可在域后映射阶段获得相同的结果。转换器按以下顺序调用:

  1. 机制 Realm - 最终主转换器
  2. 机制配置 - 最终的主转换器
  3. realm Mapping - principal-transformer

如果这个过程导致 null 主体,则会抛出错误并终止身份验证。

图 2.5. 最终主要转换

获取 Realm 身份

最后一系列主体转换后,调用在域名映射中标识的安全域来获取用于继续身份验证的域身份

2.6.3. HTTP 身份验证

Elytron 提供一整套 HTTP 身份验证机制,包括 BASIC、FORMDIGESTSPNEGOCLIENT_CERT。HTTP 身份验证是使用 HttpAuthenticationFactory 进行处理的,它既是使用 HTTP 身份验证机制的身份验证策略,也是配置的身份验证机制的工厂。

HttpAuthenticationFactory 参考以下内容:

SecurityDomain
将对其执行任何机制身份验证的安全域。
HttpServerAuthenticationMechanismFactory
服务器端 HTTP 身份验证机制的一般工厂。
MechanismConfigurationSelector
您可以使用它为身份验证机制提供其他配置。mechanism ConfigurationSelector 的目的是获取特定于所选机制的配置。这包括有关应当向远程客户端提供的机制、其他主要转换器和身份验证过程中要使用的域映射器的域名信息。

2.6.4. SASL 身份验证

SASL 是一种身份验证框架,将身份验证机制本身与其使用的协议分开。它还允许使用其他身份验证机制,如 DIGEST-MD5、GSSAPIOTPSCRAM。SASL 身份验证不属于 Jakarta EE 规范。SASL 身份验证使用 SaslAuthenticationFactory 进行处理,SaslAuthenticationFactory 既是使用 SASL 身份验证机制的身份验证策略,又是用于配置身份验证机制的工厂。

SaslAuthenticationFactory 参考以下内容:

SecurityDomain
将对其执行任何机制身份验证的安全域。
SaslServerFactory
服务器端 SASL 验证机制的一般工厂。
MechanismConfigurationSelector
您可以使用它为身份验证机制提供其他配置。mechanism ConfigurationSelector 的目的是获取特定于所选机制的配置。这包括有关应当向远程客户端提供的机制、其他主要转换器和身份验证过程中要使用的域映射器的域名信息。

2.6.5. Elytron Subsystem 和 Legacy 系统间的交互

您可以将传统 安全 子系统组件以及旧版核心管理身份验证的一些主要组件映射到 Elytron 功能。这允许在基于 Elytron 的配置中使用这些旧组件,并允许从旧组件进行增量迁移。

2.6.6. Elytron 子系统中的资源

JBoss EAP 在 elytron 子系统中提供一组资源:

工厂
aggregate-http-server-mechanism-factory
HTTP 服务器工厂定义,其中 HTTP 服务器工厂是其他 HTTP 服务器工厂的聚合。
aggregate-sasl-server-factory
SASL 服务器工厂定义,其中 SASL 服务器工厂是其他 SASL 服务器工厂的聚合。
configurable-http-server-mechanism-factory
HTTP 服务器工厂定义,它将包装另一个 HTTP 服务器工厂并应用指定的配置和过滤。
configurable-sasl-server-factory
SASL 服务器工厂定义,打包另一个 SASL 服务器工厂并应用指定的配置和过滤。
custom-credential-security-factory
自定义凭据 SecurityFactory 定义。
http-authentication-factory

包含安全域与 HttpServerAuthenticationMechanismFactory 关联 的资源.

如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理

kerberos-security-factory

用于获取用于身份验证期间使用的 GSSCredential 的安全工厂。

如需更多信息,请参阅如何为 JBoss EAP 使用 Kerberos 设置 SSO 配置 Elytron 子系统

mechanism-provider-filtering-sasl-server-factory
SASL 服务器工厂定义,允许供应商过滤该工厂,其中使用提供程序加载工厂。
provider-http-server-mechanism-factory
HTTP 服务器工厂定义,其中 HTTP 服务器工厂是来自提供程序列表中的工厂聚合。
provider-sasl-server-factory
SASL 服务器工厂定义,其中 SASL 服务器工厂是来自提供程序列表中的工厂聚合。
sasl-authentication-factory

包含安全域与 SASL 服务器工厂关联的资源。

如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_server_security/#elytron_secure_mgmt_new_identity_store 中的新身份服务的安全管理接口

service-loader-http-server-mechanism-factory
HTTP 服务器工厂定义,其中 HTTP 服务器工厂是利用 ServiceLoader 标识的工厂的聚合。
service-loader-sasl-server-factory
SASL 服务器工厂定义,其中 SASL 服务器工厂是通过 ServiceLoader 识别的工厂聚合。
主体转换器
aggregate-principal-transformer
单个转换器试图转换原始主体,直到返回一个非空主体。
chained-principal-transformer
典型的转换器定义,主体转换器是其他主要转换器的串联。
constant-principal-transformer
主流转换器定义,主体转换器始终返回相同的常量。
custom-principal-transformer
自定义主体转换器定义.
regex-principal-transformer
基于正则表达式的主体转换器.
regex-validating-principal-transformer
基于正则表达式的主体转换器,它使用正则表达式来验证名称。
主体 Decoders
aggregate-principal-decoder
一个主要的解码器定义,其中主体解码器是其他主体解码器的聚合。
concatenating-principal-decoder
一个主要的解码器定义,其中主体解码器是其他主体解码器的串联。
constant-principal-decoder
定义始终返回相同常数的主要解码器。
custom-principal-decoder
自定义主体解码器的定义。
x500-attribute-principal-decoder

定义基于 X500 属性的主体解码器。

如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理

x509-subject-alternative-name-evidence-decoder

在 X.509 证书中使用主题替代名称扩展作为主体的证明解码器。

如需更多信息,请参阅如何使用主题备用名称扩展配置 X.509 证书的 Evidence Decoder ,以了解如何为 JBoss EAP 配置服务器安全性

realm Mappers
constant-realm-mapper
始终返回相同值的恒定域映射器的定义。
custom-realm-mapper
自定义域映射器的定义.
mapped-regex-realm-mapper
首先使用正则表达式提取域名称的域映射器实施的定义,然后使用配置的域名映射进行转换。
simple-regex-realm-mapper
定义一个尝试使用正则表达式中的捕获组提取域名的简单域映射器(如果未提供匹配项),则改为使用委派域映射器。
realm
aggregate-realm

域定义是两个域的聚合,一个用于身份验证步骤,另一个用于加载授权步骤的身份。

注意

导出的传统安全域不能用作 aggregate-realm 的授权步骤的 Elytron 安全域

caching-realm

启用缓存到另一安全域的 realm 定义。缓存策略是 Least Recently Used,在达到最大条目数时,访问最少的条目将被丢弃。

如需更多信息,请参阅如何在 为 JBoss EAP 配置身份管理 中为安全性 Realms 设置缓存

custom-modifiable-realm
配置为可修改的自定义域预期将实施 Mod ableSecurityRealm 接口。通过将域配置为可修改的管理操作,将可用于操作该域。
custom-realm
自定义域定义可以实施 s SecurityRealm 接口或 Mod ibleSecurityRealm 接口。无论实施了哪一个接口,都不会公开用于管理域。但是,依赖该域的其他服务仍能够执行类型检查和投射,以获取修改 API 的访问权限。
filesystem-realm

由文件系统支持的简单安全域定义。

如需更多信息,请参阅如何在如何为 JBoss EAP 配置身份管理中,使用基于文件系统的用户身份 存储 配置身份验证。

identity-realm
在管理模型中表示身份的安全域定义。
jdbc-realm

由使用 JDBC 的数据库支持的安全域定义。

如需更多信息,请参阅如何在如何为 JBoss EAP 配置身份管理中,使用基于数据库的用户身份 存储 配置身份验证。

key-store-realm

由密钥存储支持的安全域定义。

如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理

ldap-realm

LDAP 支持的安全域定义。

如需更多信息,请参阅如何在如何为 JBoss EAP 配置身份管理中,使用基于 LDAP 的 Identity Store 配置身份验证。

properties-realm

由属性文件支持的安全域定义。

使用基于属性文件的身份存储配置身份验证以如何为 JBoss EAP 配置身份管理

token-realm
种安全域定义,能够从安全令牌验证和提取身份。
权限映射器
custom-permission-mapper
自定义权限映射器的定义.
logical-permission-mapper
逻辑权限映射器的定义.
simple-permission-mapper
定义简单配置的权限映射器.
constant-permission-mapper
始终返回相同常量的权限映射器的定义。
角色解码器
custom-role-decoder
自定义 RoleDecoder 的定义.
simple-role-decoder
定义一个简单的 RoleDecoder,该角色采用单个属性并将其直接映射到角色。
source-address-role-decoder
定义 source-address-role-decoder,它将角色根据客户端的 IP 地址分配给身份。
aggregate-role-decoder

聚合了两个或多个角色解码器返回的角色的 aggregate-role-decoder 定义。

如需更多信息,请参阅如何在如何为 JBoss EAP 配置身份管理中,使用基于文件系统的用户身份 存储 配置身份验证。

角色映射器
add-prefix-role-mapper
角色映射器的角色映射器定义,它为每个提供的每一提供添加前缀。
add-suffix-role-mapper
角色映射器的角色映射器定义,每个提供的后缀都会添加后缀。
aggregate-role-mapper
角色映射器定义,其中角色映射器是其他角色映射器的聚合。
constant-role-mapper

角色映射器定义,始终返回一组恒定角色。

如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理

custom-role-mapper
自定义角色映射器的定义.
logical-role-mapper
角色映射器的角色映射器定义,该定义使用两个引用的角色映射器执行逻辑操作。
mapped-role-mapper
角色映射器的角色映射器定义,该映射器使用预配置的角色名称映射器映射器。
regex-role-mapper

角色映射程序定义,角色映射程序使用正则表达式来转换角色。例如,您可以把 "app-admin", "app-operator" 分别映射到 "admin" 和 "operator"。

如需更多信息,请参阅 regex-role-mapper 属性

SSL 组件
client-ssl-context

用于连接客户端的 SSLContext。

如需更多信息,请参阅如何为 JBoss EAP 配置服务器 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_server_security/#using_client_ssl_context 安全性中的客户端-ssl-context

filtering-key-store

过滤密钥存储定义,它通过过滤密钥存储 来提供密钥存储

如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_server_security/#using_filtering_key_store 的过滤密钥存储

key-manager

用于创建密钥管理器列表的关键管理器定义,以用于创建 SSL 上下文。

如需更多信息,请参阅如何使用 Elytron 子系统为管理接口启用单向 SSL/TLS ,了解如何为 JBoss EAP 配置服务器安全性

key-store

密钥存储定义.

如需更多信息,请参阅如何使用 Elytron 子系统为管理接口启用单向 SSL/TLS ,了解如何为 JBoss EAP 配置服务器安全性

ldap-key-store

LDAP 密钥存储定义,它将从 LDAP 服务器加载密钥存储。

如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性的使用 ldap-key-store

server-ssl-context

用于连接的服务器端的 SSL 上下文。

如需更多信息,请参阅如何使用 Elytron 子系统为管理接口启用单向 SSL/TLS ,了解如何为 JBoss EAP 配置服务器安全性

trust-manager

用于创建 TrustManager 列表的信任管理器定义,用于创建 SSL 上下文。

如需更多信息,请参阅如何使用 Elytron 子系统为管理接口启用双向 SSL/TLS ,了解如何为 JBoss EAP 配置服务器安全性

其他
aggregate-providers
由两个或多个 提供商加载器 资源的聚合。
身份验证配置
单个身份验证配置定义,供部署到 JBoss EAP 和其他资源的客户端在进行远程连接时用于进行身份验证。
authentication-context
单个身份验证上下文定义,用于在部署至 JBoss EAP 的客户端和其他资源进行远程连接时,提供 ssl -context 和身份验证配置
credential-store

凭据存储来为敏感信息(如外部服务的密码)保留别名。

如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_server_security/#cred_store_create 创建凭据存储

dir-context

用于连接到目录(LDAP)服务器的配置。

如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性的使用 ldap-key-store

provider-loader
提供商加载器的定义。
security-domain

安全域定义。

如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理

security-property
要设置的安全属性的定义。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat