2012-12-20 3 views
11

그래서 최근에 Java 클라이언트에 서비스를 제공했습니다. 당사의 서비스는 사용자 이름/암호 검증과 함께 전송 보안을 사용합니다.WCF Java 클라이언트 및 IncludeTimestamp

서비스를 호출 할 때 클라이언트가 보안 헤더에 대한 예외를 수신하고있었습니다. 추가 연구에 따르면 WCF는 클라이언트에서 전달 된 SOAP 헤더에 타임 스탬프가 포함될 것으로 예상합니다. 이 값이 없으면 (또는 분산이 5 분보다 길면) 예외가 발생합니다.

또한 Java 클라이언트가 WCF가 예상되는 타임 스탬프를 통과하지 못하는 것으로 나타났습니다. 유일한 해결 방법은 CustomBinding을 구현하고 IncludeTimestamp를 false로 설정하는 것입니다. 이를 통해 클라이언트는 성공적으로 서비스를 호출 할 수있었습니다.

오늘은 MSDN에서 다음을 참조 WCF와 보안을위한 모범 사례를 찾는 동안 : 사용자 정의 바인딩에 True로

설정 SecurityBindingElement.IncludeTimestamp을

사용자 지정 바인딩을 만들, 당신 IncludeTimestamp를 으로 설정해야합니다. 그렇지 않으면 IncludeTimestamp가 false로 설정되고 클라이언트 이 X509 인증서와 같은 비대칭 키 기반 토큰을 사용하는 경우 메시지에 서명되지 않습니다.

그렇다면 내 질문은 외부 세계에 WCF (및 결국 웹 API) 서비스를 노출 할 때 가장 좋은 방법은 무엇입니까?

+0

다른 서비스 툴킷간에 많은 변형이 있습니다. 가장 좋은 방법이 무엇인지 잘 모르겠습니다. 메시지 또는 기본 인증에서 사용자 이름이있는 HTTPS가 대부분의 툴킷과 호환된다는 것을 알았습니다. 그렇더라도 WCF는 더 제한적인 측면에서 오류를 범하는 반면 Java 도구 모음은 더 느립니다. WCF는 이러한 문제를 해결하기 위해 사용자 지정 바인딩에 플래그를 계속 추가합니다. – Sergey

답변

1

모범 사례는 시행 가능한 경우에만 유효합니다. 클라이언트에 대한 제어권이없고 타임 스탬프를 보낼 수 없다면 반드시 includetimestamp를 false로 설정하십시오.