我们有以下配置:
- Apache 2.2反向代理,终止SSL卸载的HTTPS。
- JBOSS 6.1 EAP应用程序服务器展示SOAP服务
apache的配置如本文中所述。
肥皂服务是在无状态的bean中实现的。这样:
@WebContext( urlPattern = "/ba/test", authMethod = "BASIC", transportGuarantee = "NONE", secureWSDLAccess = false )
@Stateless
@WebService
@SecurityDomain( "TestDomain" )
@RolesAllowed("TestRole")
public class TestSsb {
@WebMethod
public String testMe(String in) {
return "succeeded";
}
}
已配置了"测试域"。
在当前设置中,序列号是通过专用的HTTP标头传输的,我们在JBOSS配置XML文件中使用自定义登录模块。这有效。
但是,我们希望尽可能应用标准机制。鉴于此设置并不那么古怪,因此必须有一种访问登录模块配置中X509证书信息的方法(例如,使用BaseCertloginModule)。
这里有2个问题:
- 该文档假定标准设置,其中SSL终止(似乎是身份验证)由JBOSS进行。
- 文档似乎假设该证书"所有者"用于授权,而我需要该主题。
我不确定如何继续这样做。任何帮助将不胜感激。
解决方案在开箱即用(播放后)。authmethod ="基本"必须设置为authMethod =" client-cert"。所以:
@webcontext(contextroot =" aa/url",urlpattern ="*",authmethod = " client-cert",transportguarantee =" none",securewsdlaccess = false)
接下来,您需要指定角色/安全域作为注释:
@securitydomain(" mycertwebservedomain")
@declareroles(value = {" my_role"})
通过指定DataBaseCertLoginModule。
<security-domain name="MyCertWebserviceDomain">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseCertLoginModule" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/DS"/>
<module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/>
<module-option name="rolesQuery" value="select role_name, 'Roles' from identity_role where identity IN(select regexp_replace(?, '.*SERIALNUMBER=([0-9]*), .*','1') from dual)"/>
</login-module>
</authentication>
</security-domain>
从数据库中获取角色(例如my_role),并由证书中的序列号索引。
需要将协议设置为JBOSS的AJP。
现在可以从安全主体中获取身份:sessionContext.getCallePrincipal().getName()
。