【问题标题】:Cancel Security Context Token (SCT/Cancel)取消安全上下文令牌 (SCT/Cancel)
【发布时间】:2016-03-07 07:43:33
【问题描述】:

我们正在使用 wsdl2java 和 cxf codegen 插件为受 ws-security 保护的服务创建客户端。

通过自动生成的客户端类 (OrganisationsEinheitenCoreService) 调用服务非常简单:

OrganisationsEinheitenCoreService service = new OrganisationsEinheitenCoreService();
IOrganisationsEinheitenCoreService serviceEndpoint = service.getServiceEndpoint();

BindingProvider bindingProvider = (BindingProvider) serviceEndpoint;

Map<String, Object> ctx = bindingProvider.getRequestContext();
ctx.put("ws-security.username", "MyUsername");
ctx.put("ws-security.password", "MyPassword");

ArrayOfStaat staaten = serviceEndpoint.getStaaten();

当从服务调用方法“getStataten”时,cxf 会在调用实际方法“getStataten”之前自动请求一个带有用户名和密码(action = http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT)的 SecurityContextToken。从服务接收到 SCT 后,cxf 存储 sct 并将其用于下一次调用。

出于某种原因,cxf 从不调用 http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT/Cancel 来终止 SCT。我们也无法弄清楚如何明确地做到这一点,我们尝试了几种方法,例如对类使用 try-with-resource,或者获取客户端并调用 close 方法。

SCT 通常会在一定时间后自行过期,不幸的是我们需要在调用服务后立即关闭它们。

有什么想法吗?

【问题讨论】:

    标签: java cxf ws-security wsdl2java security-context-token


    【解决方案1】:

    您可以编写一个简单的拦截器来检索和存储表示已发行令牌的 SecurityToken 对象。然后,您可以使用 CXF STSClient 类显式取消它。其中一些测试可能会对您有所帮助:

    https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=systests/ws-security/src/test/java/org/apache/cxf/systest/ws/wssc/WSSCUnitTest.java;h=3d524675b3b0ae435282e599f4d099338e24ede6;hb=HEAD

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 2015-08-17
      • 1970-01-01
      • 2019-10-21
      • 2011-04-20
      相关资源
      最近更新 更多