Отменить токен контекста безопасности (SCT/ Отмена)

Мы используем wsdl2java и плагин codex cgen для создания клиента для защищенной службы 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();

При вызове метода "getStaaten" из службы cxf автоматически запрашивает SecurityContextToken с именем пользователя и паролем (action = http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT) перед вызовом фактического метода "getStaaten". После получения SCT от службы cxf сохраняет sct и использует его для следующего вызова (вызовов).

По какой-то причине cxf никогда не вызывает http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT/Cancel чтобы прекратить работу SCT. Мы также не могли понять, как это сделать явно, мы попробовали несколько вещей, таких как try-with-resource с классом, или получение клиента и вызов метода close.

SCT обычно устаревают сами по себе через определенное время, к сожалению, мы должны закрыть их сразу после вызова службы.

Есть идеи?

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

Другие вопросы по тегам