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>
答案 0 :(得分:24)
回答更新(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
的提供实现。 AFAIK不可能提供自己的CallbackHandler实现。
安全域可以使用“RealmDirect”登录模块将身份验证委派给安全领域。
安全领域可以使用“jaas”身份验证配置将身份验证委派给安全域
请参阅JBoss安全开发人员Darran Lofthouse的this response。
安全领域封装对用户存储库的访问(DB - jdbc-realm,LDAP - ldap-realm,属性文件 - properties-realm,...)。与传统安全性相比,它与JAAS登录模块处于类似的水平。提供了一个API,因此可以实现自定义领域。
安全域表示使用安全域进行身份验证的安全策略。安全域可用于管理安全性以及应用程序安全性。对安全域的成功身份验证会生成SecurityIdentity
,表示当前用户。
阅读JBoss EAP文档中的Elytron subsystem章节,以获得更详细的Elytron组件概述。
要了解有关在Elytron安全域中控制身份验证流程的更多信息,请阅读Darran Lofthouse的this article。
如果您要从Legacy迁移到Elytron安全,则可以将旧版安全域公开为 Elytron Security Realm 。在Elytron子系统Migration guide
中阅读有关此场景的更多信息