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

Difference between security-realm and security-domain in WildFly

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>

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

旧安全性

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

安全领域主要用于服务器管理界面和远程处理的配置安全。 领域认证基于 javax.security.auth.callback.CallbackHandler 提供的实现。据我所知,不可能提供自己的 CallbackHandler 实现。

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

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

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

Elytron 安全

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

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

阅读 JBoss EAP 文档中的 Elytron subsystem 章节,以更详细地了解 Elytron 组件。

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

介于 Legacy 和 Elytron 安全性之间

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