EJB JAX-WS Web服务身份验证和授权

时间:2014-12-30 20:01:22

标签: ejb jax-ws http-basic-authentication

如何使用发布为@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。

2 个答案:

答案 0 :(得分:1)

通过政策进行基本认证

来自v10 docs

  

Web服务可以包含零个或多个与之关联的WS-Policy文件   它。 WS-Policy文件遵循WS-Policy的指导原则   规格。 WebLogic Server使用WS-Policy文件指定   消息级安全性的详细信息(数字签名和   加密)和Web服务的可靠消息传递功能。您   可以将WS-Policy文件附加到Web服务端点,这意味着   策略断言适用于Web的所有操作   服务端点。您还可以将WS-Policy文件附加到   操作,这意味着策略断言仅适用于   具体操作。此外,您可以附加WS-Policy文件   入站或出站SOAP消息,或两者兼而有之。

您的服务似乎可以attach a basic auth policy

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

您可以通过管理控制台通过here概述的步骤应用此自定义政策,也可以考虑引用其中一个Oracle-preconfigured policies


将角色映射到群组

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

  

如果在类或类的方法上使用@RolesAllowed注释,也可以使用注释显式声明隐式声明的角色。

     

使用管理控制台在WebLogic Server中创建安全角色。有关详细信息,请参阅&#34; Manage Security Roles&#34;在Oracle WebLogic Server管理控制台帮助中。

Manage Security Roles部分继续讨论scoped roles.

  

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

有关管理范围角色的更多信息是here

答案 1 :(得分:0)

解决了添加角色映射的问题,因为它在任何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>

&#34; myweblogicgroup&#34;是在WebLogic安全领域中创建的组,系统用户用于对Web服务进行身份验证的组与之关联。

This link帮助了我。