EJB JAX-WS Web Service authentication and authorization



如何使用作为@WebService发布的会话 Bean 通过应用程序服务器域/安全域使用 HTTP Basic 进行身份验证?

在 Web 项目中,可以使用 web.xml 将角色映射到组,但我不知道如何在 EJB-JAR 项目中执行此操作。我认为ejb-jar.xml无法做到这一点.

示例代码,无需角色注释即可正常工作:

@Stateless
@WebService(portName="RestrictedServicePort")
@DeclareRoles(value = "Administrators")
public class RestrictedServiceBean {
    @RolesAllowed(value = "Administrators")
    public String restrictedOperation() {
        return "Secret information";        
    }
}

错误:

<faultstring>[EJB:010160]Security Violation: User: '&lt;anonymous>' has insufficient permission to access EJB: type=&lt;ejb>

基本凭据标头:

Authorization: Basic d2VibG9naWM6d2VsY29tZTE=

我怀疑它必须通过特定于供应商的配置来完成。我正在使用WebLogic 10.3.6,Java EE 5/EJB 3.0。

通过策略进行基本身份验证

从 v10 文档:

一个 Web 服务可以有零个或多个与 WS 策略文件相关联 它。WS-Policy 文件遵循 WS-Policy 的准则 规范。WebLogic Server 使用 WS-Policy 文件来指定 邮件级安全性的详细信息(数字签名和 加密)和 Web 服务的可靠消息传递功能。你 可以将 WS-Policy 文件附加到 Web 服务终结点,这意味着 策略断言适用于 Web 的所有操作 服务终结点。您还可以将 WS 策略文件附加到 操作,这意味着策略断言仅适用于 具体操作。此外,还可以将 WS 策略文件附加到 入站和/或出站 SOAP 消息。

您似乎可以将基本的身份验证策略附加到您的服务:

<sp:TransportToken>
  <wsp:Policy>
    <sp:HttpBasicAuthentication/>
  </wsp:Policy>
</sp:TransportToken>

您可以通过管理控制台通过此处概述的步骤应用此定制策略,也可以考虑引用 Oracle 预配置的策略之一。


将角色映射到组

WebLogic (v12) 文档在讨论 EJB 中@RolesAllowed的用法时提到了以下内容:

还可以使用批注显式声明在类或类的方法上使用@RolesAllowed批注时隐式声明的角色。

您可以使用管理控制台在 WebLogic Server 中创建安全角色。有关详细信息,请参阅 Oracle WebLogic Server 管理控制台帮助中的"管理安全角色"。

"管理安全角色"部分继续讨论scoped roles.

然后,您可以为包含高度敏感的业务逻辑的特定 EJB 创建作用域角色。为 EJB 创建策略时,可以指定只有作用域角色可以访问 EJB。

有关管理作用域内角色的详细信息,请参阅此处。

解决了添加角色映射的问题,就像在任何 Web 模块中一样,但使用专有的 weblogic-ejb-jar.xml,如下所示:

<wls:security-role-assignment>
    <wls:role-name>Administrators</wls:role-name>
    <wls:principal-name>myweblogicgroup</wls:principal-name>
</wls:security-role-assignment>

"myweblogicgroup"是在 WebLogic 安全领域中创建的组,系统用户用于向 Web 服务进行身份验证的系统用户与该组相关联。

这个链接帮助了我。

最新更新