第 4 章 应用程序配置
4.1. 配置 Web 应用程序以使用 Elytron 或传统安全性进行身份验证
在配置了 elytron 或
传统 安全
子系统以进行身份验证后,您需要将应用配置为使用它。
配置应用程序的
web.xml
。您的
web.xml
需要配置为使用适当的身份验证方法。使用elytron
子系统时,这在您创建的http-authentication-factory
中定义。在使用旧安全
子系统时,这取决于您的登录模块以及您要配置的身份验证类型。使用
BASIC
身份验证的web.xml
示例<web-app> <security-constraint> <web-resource-collection> <web-resource-name>secure</web-resource-name> <url-pattern>/secure/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>Admin</role-name> </auth-constraint> </security-constraint> <security-role> <description>The role that is required to log in to /secure/*</description> <role-name>Admin</role-name> </security-role> <login-config> <auth-method>BASIC</auth-method> <realm-name>exampleApplicationDomain</realm-name> </login-config> </web-app>
将您的应用配置为使用安全域。
您可以配置应用程序的
jboss-web.xml
,以指定您要用于身份验证的安全域。使用elytron
子系统时,这在您创建application-security-domain
时定义。在使用传统安全
子系统时,这是传统安全域的名称。jboss-web.xml
示例<jboss-web> <security-domain>exampleApplicationDomain</security-domain> </jboss-web>
使用
jboss-web.xml
,您可以仅为单个应用配置安全域。或者,您也可使用undertow
子系统为所有应用指定默认安全域:这样,您可以省略使用jboss-web.xml
来配置各个应用的安全域。/subsystem=undertow:write-attribute(name=default-security-domain, value="exampleApplicationDomain")
重要在
undertow
子系统中设置default-security-domain
将应用到 所有 应用。如果设置了default-security-domain
,并且应用在jboss-web.xml
文件中指定了安全域,则jboss-web.xml
中的配置将覆盖undertow
子系统中的default-security-domain
。注意EJB 的安全域在 EJB 配置中定义,可以是
ejb3
子系统、jboss-ejb3.xml
文件中的 EJB 描述符,还是使用@SecurityDomain
注释。如需更多信息,请参阅《开发 EJB 应用指南》中的 EJB 应用程序安全性。
静默 BASIC 身份验证
您可以将 elytron
配置为执行静默的 BASIC
身份验证。启用静默身份验证后,不会提示用户登录以访问该 Web 应用。改为使用另一种身份验证机制。如果用户的请求包含授权标头,则使用 BASIC
身份验证机制。
要启用静默 BASIC
身份验证,请将 auth-method
属性的值设置为以下内容:
<auth-method>BASIC?silent=true</auth-method>
在 Parallel 中使用 Elytron 和传统安全子系统
您可以在 elytron
和旧 安全
子系统中定义身份验证,并并行使用它们。如果您在 undertow
子系统中使用 jboss
,则 JBoss EAP 将首先尝试匹配 -web.xml
和 default-security-domainelytron
子系统中配置的安全域。如果未找到匹配项,则 JBoss EAP 将尝试将安全域与传统 安全性
子系统中配置的安全域匹配。如果 elytron
和传统 安全
子系统各自具有名称相同的安全域,则使用 elytron
安全域。
如果您使用一个安全域定义了 Webservlet,并且您从使用 EJB 特定安全域的另一个 EAR 模块调用 EJB,则可能会出现以下情况之一:
- 如果 WAR 和 EJB 映射到不同的 Elytron 安全域,您需要配置流或受信任的安全域,以便它们的身份从一个部署域传播到下一个部署域。除非执行此操作,否则在调用到达 EJB 后,身份将变为匿名身份。有关如何为身份验证配置安全身份的更多信息,请参阅配置可信安全域流。
- 如果 WAR 和 EJB 引用了不同的安全域名,但它们映射到相同的 Elytron 安全域,则它们的身份将传播,而无需任何其他步骤。
迁移时,最好迁移整个应用程序。不建议并行迁移 EJB 和 WAR,不建议同时使用 elytron
和旧版 安全
子系统。有关如何将应用迁移到使用 Elytron 的更多信息,请参阅 JBoss EAP 迁移指南中的 Migrating to Elytron。