JAAS 安全域信息只能在服务器特定的部署描述符中指定吗?

发布于 2024-11-17 06:13:30 字数 394 浏览 2 评论 0原文

我正在 JSF 中进行基于表单的身份验证,并且可以使其工作,但它需要特定于服务器的部署描述符来指定 JAAS 安全域信息。

例如。在 JBoss 6 上,我需要一个 WEB-INF/jboss-web.xml ,其中包含以下内容:

<jboss-web>
    <security-domain>java:/jaas/myAppDomain</security-domain>
</jboss-web>

在 glassfish 上,类似的内容需要位于 WEB-INF/sun-web.xml 中反而。

在 EE6 中是否有供应商中立的方法来做到这一点?如果没有那么为什么?

I'm doing form-based authentication in JSF and I can get it to work but it requires a server specific deployment descriptor to specify the JAAS security domain info.

eg. on JBoss 6 I need a WEB-INF/jboss-web.xml with the following:

<jboss-web>
    <security-domain>java:/jaas/myAppDomain</security-domain>
</jboss-web>

On glassfish something similar needs to be in WEB-INF/sun-web.xml instead.

Is there a vendor neutral way to do this in EE6 ? And if no then why ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一杆小烟枪 2024-11-24 06:13:30

在 EE6 中是否有供应商中立的方法来执行此操作?

是的,有。您需要在 web.xml 文件中指定领域名称,其方式类似于下面所示的方式:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
...
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>myRealm</realm-name> <!-- the name of the realm created in the application server should be specified here -->
        <form-login-config>
            <form-login-page>/login.xhtml</form-login-page>
            <form-error-page>/login-error.xhtml</form-error-page>
        </form-login-config>
    </login-config>
...
</web-app>

上述内容在 Glassfish 中有效,sun-web.xml 中没有任何条目,除了角色到组映射(即用于强制执行授权约束)。

当您的 Web 模块和 EJB 模块必须仅使用 JBoss 中一个安全管理器的主体时,在 JBoss 部署描述符中指定 security-domain 元素是一种更好的方法(以及其他容器中的等效实现)。

考虑到 JAAS 登录模块的工作方式以及无法在 ejb-jar.xml 中指定用于身份验证的领域,EJB 容器很可能会允许基于来自一个成功的身份验证响应的业务方法调用。不同的登录模块(与您的预期不同)。这意味着不同领域但同一组(映射到业务方法允许的角色)中的用户能够调用业务方法。为了避免这种情况,人们将在特定于供应商的部署描述符中指定安全域。

注意 - 我不确定容器在为 WAR 中部署的 EJB 选择 JAAS 登录模块时的行为。

Is there a vendor neutral way to do this in EE6 ?

Yes, there is. You'll need to specify the realm name in the web.xml file, in a manner similar to the one shown below:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
...
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>myRealm</realm-name> <!-- the name of the realm created in the application server should be specified here -->
        <form-login-config>
            <form-login-page>/login.xhtml</form-login-page>
            <form-error-page>/login-error.xhtml</form-error-page>
        </form-login-config>
    </login-config>
...
</web-app>

The above works in Glassfish without any entries in sun-web.xml, except for the role to group mapping (that is used for enforcing authorization constraints).

Specifying the security-domain element in the JBoss deployment descriptor is a better approach when you have a web module and an EJB module that must use principals from only one Security Manager in JBoss (and the equivalent implementations in other containers).

Given how JAAS login modules work and that one cannot specify a realm for authentication in ejb-jar.xml, it is quite possible that the EJB container will permit a business method invocation based on successful authentication response from a different Login Module (than what you intended). This would mean that a user in a different realm but the same group (mapped to the permitted role for the business method) is capable of invoking the business method. It is to avoid this scenario that one would specify the security domain in the vendor-specific deployment descriptor.

Note - I'm unsure of the behavior of the container in choosing a JAAS Login Module for EJBs deployed in a WAR.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文