WildFly 中 security-realm 和 security-domain 的区别

Posted

技术标签:

【中文标题】WildFly 中 security-realm 和 security-domain 的区别【英文标题】:Difference between security-realm and security-domain in WildFly 【发布时间】:2015-09-11 05:14:27 【问题描述】:

WildFly 中 security-domain 和 security-realm 的主要区别是什么?

standalone.xml

               <security-domain name="foo">             
                    <authentication>
                        <login-module code="..." flag="...">                           
                        </login-module>                                         
                    </authentication>
                </security-domain>

        <security-realm name="foo">
            <authentication>
                <local default-user="..." allowed-users="..." 
skip-group-loading="..."/>
                <properties path="..." relative-to="..."/>
            </authentication>
            <authorization>
                <properties path="..." relative-to="..."/>
            </authorization>
        </security-realm>

【问题讨论】:

【参考方案1】:

答案已更新 (2018-06-08) 以反映 WildFly Elytron 命名。 WildFly Elytron 是 WildFly 11(和 JBoss EAP 7.1)中引入的一个新的安全子系统。两个安全子系统 - legacy 和 Elytron - 都有安全域和安全域的概念,但含义不同。

旧版安全

安全域主要用于定义已部署应用程序的安全性。 安全域中的标准身份验证基于 JAAS javax.security.auth.spi.LoginModule 实现。应用程序可以提供自定义登录模块。

Security Realms主要用于服务器管理接口和远程处理的配置安全。 领域身份验证基于提供的javax.security.auth.callback.CallbackHandler 实现。 AFAIK 不可能提供自己的 CallbackHandler 实现。

安全域可以使用“RealmDirect”登录模块将身份验证委托给安全域。

安全领域可以使用“jaas”身份验证配置将身份验证委托给安全域

另请参阅 JBoss 安全开发人员 Darran Lofthouse 的 this response。

Elytron 安全

Security Realms 封装了对用户存储库(DB - jdbc-realm、LDAP - ldap-realm、属性文件 - properties-realm,...)的访问。与传统安全性相比,它与 JAAS 登录模块处于相似级别。提供了一个 API,因此可以实现自定义领域。

安全域表示使用安全域进行身份验证的安全策略。安全域可用于管理安全以及应用安全。针对安全域的成功身份验证会生成代表当前用户的SecurityIdentity

阅读 JBoss EAP 文档中的Elytron subsystem 章节,以获得关于 Elytron 组件的更详细的概述。

要了解有关在 Elytron 安全域中控制身份验证流程的更多信息,请阅读 Darran Lofthouse 的 this article。

介于 Legacy 和 Elytron 安全性之间

如果您从 Legacy 迁移到 Elytron 安全,您可以将 Legacy Security Domain 公开为 Elytron 安全领域。在 Elytron 子系统Migration guide 中阅读有关此场景的更多信息@

【讨论】:

在应用程序的 web.xml 中,您可以为您的登录配置定义一个领域名称。但是,如果我的应用程序使用安全域,那么 web.xml 中指定的领域名称有什么作用? web.xml 中的领域名称只是呈现给客户端的名称,用于验证您的应用程序。您可以在 BASIC 身份验证期间在浏览器身份验证对话框中看到此名称。

以上是关于WildFly 中 security-realm 和 security-domain 的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何将 https-listener 添加到 WildFly 的默认服务器?

使用 wildfly (wildfly:deploy) 在一个简单的 Maven 项目中构建失败

Docker 容器中的 Wildfly 未启动

Wildfly 中 Jacorb 的问题

从 Wildfly 10 中排除所有模块

在 JBoss/WildFly 中注入 EntityManager