다음을 통해 공유


클라이언트 유효성 검사

서비스는 메타데이터를 자주 게시하여 클라이언트 프록시 형식의 자동 생성 및 구성을 사용하도록 설정합니다. 서비스를 신뢰할 수 없는 경우 클라이언트 애플리케이션은 메타데이터가 보안, 트랜잭션, 서비스 계약 유형 등에 대한 클라이언트 애플리케이션의 정책을 준수하는지 확인해야 합니다. 다음 샘플에서는 서비스 엔드포인트를 안전하게 사용할 수 있도록 서비스 엔드포인트의 유효성을 검사하는 클라이언트 엔드포인트 동작을 작성하는 방법을 보여 줍니다.

이 서비스는 4개의 서비스 엔드포인트를 노출합니다. 첫 번째 엔드포인트는 WSDualHttpBinding을 사용하고, 두 번째 엔드포인트는 NTLM 인증을 사용하고, 세 번째 엔드포인트는 트랜잭션 흐름을 사용하도록 설정하고, 네 번째 엔드포인트는 인증서 기반 인증을 사용합니다.

클라이언트는 클래스를 MetadataResolver 사용하여 서비스에 대한 메타데이터를 검색합니다. 클라이언트는 유효성 검사 동작을 사용하여 이중 바인딩, NTLM 인증 및 트랜잭션 흐름을 금지하는 정책을 적용합니다. 서비스의 메타데이터에서 가져온 각 ServiceEndpoint 인스턴스에 대해 클라이언트 애플리케이션은 WCF(Windows Communication Foundation) 클라이언트를 사용하여 엔드포인트에 연결하려고 시도하기 전에 엔드포인트 동작 InternetClientValidatorBehavior 의 인스턴스 ServiceEndpoint 를 추가합니다. 동작의 Validate 메서드는 서비스의 작업이 시작되기 전에 실행되고 InvalidOperationExceptions을(를) 발생시켜 클라이언트의 정책을 강제합니다.

샘플을 빌드하려면

  1. 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.

동일한 컴퓨터에서 샘플을 실행하려면

  1. 관리자 권한으로 Visual Studio용 개발자 명령 프롬프트를 열고 샘플 설치 폴더에서 Setup.bat 실행합니다. 그러면 샘플을 실행하는 데 필요한 모든 인증서가 설치됩니다.

  2. \service\bin\Debug에서 서비스 애플리케이션을 실행합니다.

  3. \client\bin\Debug에서 클라이언트 애플리케이션을 실행합니다. 클라이언트 활동은 클라이언트 콘솔 애플리케이션에 표시됩니다.

  4. 클라이언트와 서비스가 통신할 수 없는 경우 WCF 샘플대한 문제 해결 팁을 참조하세요.

  5. 샘플을 마쳤으면 Cleanup.bat 실행하여 인증서를 제거합니다. 다른 보안 샘플은 동일한 인증서를 사용합니다.

컴퓨터에서 샘플을 실행하려면

  1. 서버에서 관리자 권한으로 Visual Studio용 개발자 명령 프롬프트를 실행한 후, setup.bat service 를 입력하십시오. setup.bat 인수를 사용하여 service 실행하면 컴퓨터의 정규화된 도메인 이름을 가진 서비스 인증서가 만들어지고 서비스 인증서를 Service.cer 파일로 내보냅니다.

  2. 서버에서 App.config 편집하여 새 인증서 이름을 반영합니다. 즉, findValue 특성을 컴퓨터의 정규화된 도메인 이름으로 변경 < 합니다.

  3. 서비스 디렉터리에서 클라이언트 컴퓨터의 클라이언트 디렉터리로 Service.cer 파일을 복사합니다.

  4. 클라이언트에서 관리자 권한이 있는 Visual Studio용 개발자 명령 프롬프트를 열고 입력 setup.bat client합니다. 인수를 사용하여 실행 setup.bat 하면 client Client.com 클라이언트 인증서가 만들어지고 클라이언트 인증서를 Client.cer 파일로 내보냅니다.

  5. client.cs 파일에서 MEX 엔드포인트의 주소 값과 서비스의 새 주소와 findValue 일치하도록 기본 서버 인증서를 설정하는 방법을 변경합니다. 이렇게 하려면 localhost를 서버의 정규화된 도메인 이름으로 바꿔서 수행합니다. 다시 빌드합니다.

  6. 클라이언트 디렉터리에서 서버의 서비스 디렉터리로 Client.cer 파일을 복사합니다.

  7. 클라이언트에서 관리자 권한으로 열린 Visual Studio용 개발자 명령 프롬프트에서 ImportServiceCert.bat 실행합니다. 그러면 서비스 인증서가 Service.cer 파일에서 CurrentUser - TrustedPeople 저장소로 가져옵니다.

  8. 서버에서 관리자 권한으로 열린 Visual Studio용 개발자 명령 프롬프트에서 ImportClientCert.bat 실행합니다. 그러면 클라이언트 인증서가 Client.cer 파일에서 LocalMachine - TrustedPeople 저장소로 가져옵니다.

  9. 서비스 컴퓨터에서 Visual Studio에서 서비스 프로젝트를 빌드하고 service.exe실행합니다.

  10. 클라이언트 컴퓨터에서 client.exe실행합니다.

    1. 클라이언트와 서비스가 통신할 수 없는 경우 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사용합니다.

참고하십시오