我一直在尝试使用GlassFish作为Web服务器和SOAP UI来实现基于数字证书的身份验证和授权,以测试我的应用程序的功能但作为身份验证过程的一部分,我需要从所有消息信息中保存日志,包括在客户端的glassfish的cacerts文件中找到的别名,它使用Web服务和消息内容。
实际上是否可以从应用程序层执行此操作?我已尝试在服务器端使用Message和Logical处理程序但我无法看到与数字证书相关的任何内容,我唯一的线索就是SOAP UI从客户端获取服务器证书。
答案 0 :(得分:0)
经过一些研究,有些人对此失败了,我最终将证书详细信息添加到Web描述符上的项目并从中捕获用户名,之后找到该用户名的别名,最后在TrustStore中搜索别名以获取公钥。
首先在web.xml文件中,我们需要添加身份验证的详细信息:
<!-- Security constraint for resource only accessible to role -->
<security-constraint>
<display-name>WebServiceSecurity</display-name>
<web-resource-collection>
<web-resource-name>Authorized users only</web-resource-name>
<url-pattern>/ExampleWSService</url-pattern>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<!-- BASIC authorization -->
<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>
<!-- Definition of role -->
<security-role>
<role-name>user</role-name>
</security-role>
在sun-web.xml上,我们添加角色映射和客户端的详细信息,可以使用公钥检索。
<sun-web-app>
<security-role-mapping>
<role-name>user</role-name>
<!-- <group-name>wsusers</group-name> -->
<principal-name>CN=Name, OU=Department, O=Organization, L=City, ST=State, C=nl</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>user</role-name>
<group-name>wsusers</group-name>
</security-role-mapping>
</sun-web-app>
基于本教程:http://javaeenotes.blogspot.com/2010/10/securing-jax-ws-web-services.html