Client Validation
서비스는 메타데이터를 자주 게시하여 클라이언트 프록시 형식의 자동 생성 및 구성을 활성화합니다. 서비스를 신뢰할 수 없으면 클라이언트 애플리케이션에서 메타데이터가 보안, 트랜잭션, 서비스 계약 형식 등에 대한 클라이언트 애플리케이션의 정책을 준수하는지 확인해야 합니다. 다음 샘플에서는 서비스 엔드포인트를 안전하게 사용할 수 있도록 서비스 엔드포인트의 유효성을 검사하는 클라이언트 엔드포인트 동작 기록 방법을 보여 줍니다.
서비스는 네 개의 서비스 엔드포인트를 노출합니다. 첫 번째 엔드포인트는 WSDualHttpBinding을, 두 번째 엔드포인트는 NTLM 인증을, 세 번째 엔드포인트는 트랜잭션 흐름을, 네 번째 엔드포인트는 인증서 기반 인증을 사용합니다.
클라이언트는 MetadataResolver 클래스를 사용하여 서비스에 대한 메타데이터를 검색합니다. 클라이언트에서는 이중 바인딩 방지, NTLM 인증 및 유효성 검사 동작을 사용하는 트랜잭션 흐름에 대한 정책을 적용합니다. 클라이언트 애플리케이션은 서비스의 메타데이터에서 가져온 각 ServiceEndpoint 인스턴스에 대해 InternetClientValidatorBehavior
엔드포인트 동작의 인스턴스를 ServiceEndpoint에 추가한 다음, WCF(Windows Communication Foundation) 클라이언트를 사용하여 엔드포인트에 연결합니다. 동작의 Validate
메서드는 서비스의 작업이 호출되기 전에 실행되고 InvalidOperationExceptions
를 throw하여 클라이언트의 정책을 적용합니다.
이 샘플을 빌드하려면
- 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.
단일 컴퓨터 구성에서 샘플을 실행하려면
관리자 권한으로 Visual Studio용 개발자 명령 프롬프트를 열고 샘플 설치 폴더의 Setup.bat를 실행합니다. 이 작업은 샘플 실행에 필요한 모든 인증서를 설치합니다.
\service\bin\Debug에서 서비스 애플리케이션을 실행합니다.
\client\bin\Debug에서 클라이언트 애플리케이션을 실행합니다. 클라이언트 콘솔 애플리케이션에 클라이언트 동작이 표시됩니다.
클라이언트와 서비스가 통신할 수 없는 경우 WCF 샘플에 대한 문제 해결 팁을 참조하세요.
샘플 사용을 마치면 Cleanup.bat를 실행하여 인증서를 제거합니다. 다른 보안 샘플에도 동일한 인증서가 사용됩니다.
다중 컴퓨터 구성에서 샘플을 실행하려면
서버에서 관리자 권한으로 실행되는 Visual Studio용 개발자 명령 프롬프트를 사용하여
setup.bat service
를 입력합니다.service
인수를 사용하여setup.bat
을 실행하면 컴퓨터의 정규화된 도메인 이름이 지정된 서비스 인증서가 생성되어 Service.cer이라는 파일로 내보내집니다.서버에서 새 인증서 이름을 반영하도록 App.config를 편집합니다. 즉, <serviceCertificate> 요소에서
findValue
특성을 컴퓨터의 정규화된 도메인 이름으로 변경합니다.서비스 디렉터리에서 클라이언트 컴퓨터의 클라이언트 디렉터리로 Service.cer 파일을 복사합니다.
클라이언트에서 관리자 권한으로 실행되는 Visual Studio용 개발자 명령 프롬프트를 열고
setup.bat client
를 입력합니다.setup.bat
인수를 사용하여client
를 실행하면 Client.com이라는 클라이언트 인증서가 생성되어 Client.cer이라는 파일로 내보내집니다.client.cs 파일에서 MEX 엔드포인트의 주소 값과
findValue
를 변경하여 서비스의 새 주소와 일치하도록 기본 서버 인증서를 설정합니다. 이 작업을 수행하려면 localhost를 서버의 정규화된 도메인 이름으로 바꿉니다. 다시 빌드합니다.클라이언트 디렉터리에서 서버의 서비스 디렉터리로 Client.cer 파일을 복사합니다.
클라이언트에서 관리자 권한으로 Visual Studio용 개발자 명령 프롬프트를 사용하여 ImportServiceCert.bat을 실행합니다. 이 작업은 Service.cer 파일의 서비스 인증서를 CurrentUser - TrustedPeople 저장소로 가져옵니다.
서버에서 관리자 권한으로 Visual Studio용 개발자 명령 프롬프트를 사용하여 ImportClientCert.bat을 실행합니다. 이 작업은 Client.cer 파일의 클라이언트 인증서를 LocalMachine - TrustedPeople 저장소로 가져옵니다.
서비스 컴퓨터에서 Visual Studio로 서비스 프로젝트를 빌드하고 service.exe를 실행합니다.
클라이언트 컴퓨터에서 client.exe를 실행합니다.
- 클라이언트와 서비스가 통신할 수 없는 경우 WCF 샘플에 대한 문제 해결 팁을 참조하세요.
샘플 실행 후 정리를 수행하려면
샘플 실행을 완료했으면 샘플 폴더에서 Cleanup.bat를 실행합니다.
참고 항목
다중 컴퓨터 구성에서 이 샘플을 실행할 경우에는 이 스크립트로 클라이언트의 서비스 인증서를 제거할 수 없습니다. 다중 컴퓨터 구성의 인증서를 사용하는 WCF 샘플을 실행한 경우 CurrentUser - TrustedPeople 저장소에 설치된 서비스 인증서를 지워야 합니다. 이렇게 하려면
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
명령을 사용합니다.