2014-10-25 2 views
0

Я создаю свой веб-сервис, используя ws-import, для подключения к службе aspx, которую я защитил с помощью Kerberos в IIS. Я могу для подключения и аутентификации в порядке, когда я просто подключиться к услуге с помощью SOAPConnectionЗаголовок проверки подлинности Kerberos для клиники JAX-WS

final SOAPConnection conn = SOAPConnectionFactory.newInstance().createConnection(); 
try { 
    final MessageFactory msgFactory = MessageFactory.newInstance(); 
    final SOAPMessage message = msgFactory.createMessage(); 

    final MimeHeaders headers = message.getMimeHeaders(); 
    if (spnegoToken != null) { 
     headers.addHeader("SOAPAction", "http://tempuri.org/HelloWorld"); 
     headers.addHeader("Authorization", "Negotiate " + Base64.encode(spnegoToken)); 
    } 
    message.getSOAPBody().addBodyElement(new QName("http://tempuri.org/", "HelloWorld", "tem")); 
    final SOAPMessage response = conn.call(
     message, "http://server:9994/WebService/SampleService.asmx"); 
    return response.getSOAPBody().getTextContent(); 
    } finally { 
     conn.close(); 
    } 

Однако я не могу добавить заголовок авторизации на JAXWS генерироваться WS таким же образом:

final SampleServiceSoap sss= new SampleService().getSampleServiceSoap(); 
    ((BindingProvider) sss).getRequestContext().put(
     "Authorization", "Negotiate " + Base64.encode(spnegoToken)); 
    return sss.helloWorld(); 

Я получаю ошибку 401 как токен, поскольку я не вижу токен, прикрепленный в Wireshark. Может ли кто-нибудь указать мне на подход, который я должен принять? Приветствия, Barry

ответ

1

сортируют, оказывается, я был довольно близко:

final Map<String, List<String>> headers = new HashMap<String, List<String>>(); 

headers.put("Authorization", Collections.singletonList("Negotiate " + Base64.encode(tgt))); 

((BindingProvider) sss).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, headers); 
Смежные вопросы