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 的默认服务器?