다음을 통해 공유


Authorizing Access to Service Operations

이 샘플에서는 <serviceAuthorization>을 사용하여 PrincipalPermissionAttribute 특성을 통해 서비스 작업에 대한 액세스를 승인하는 방법을 보여 줍니다. 이 샘플은 Getting Started 샘플을 기준으로 합니다. 서비스와 클라이언트는 <wsHttpBinding>을 사용하여 구성되었습니다. <security>mode 특성은 Message로, clientCredentialTypeWindows로 설정되었습니다. PrincipalPermissionAttribute는 각 서비스 메서드에 적용되고 각 작업에 대한 액세스를 제한하는 데 사용됩니다. 호출자는 각 작업에 액세스하기 위해 Windows 관리자여야 합니다.

이 샘플에서 클라이언트는 콘솔 애플리케이션(.exe)이고 서비스는 IIS(인터넷 정보 서비스)를 통해 호스트됩니다.

참고 항목

이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.

서비스 구성 파일은 <serviceAuthorization>을 사용하여 principalPermissionMode 특성을 설정합니다.

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- The serviceAuthorization behavior sets the
           principalPermissionMode to UseWindowsGroups.
           This puts a WindowsPrincipal on the current thread when a
           service is invoked. -->
      <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
    </behavior>
  </serviceBehaviors>
</behaviors>

principalPermissionModeUseWindowsGroups로 설정하면 Windows 그룹 이름에 기초하여 PrincipalPermissionAttribute를 사용할 수 있게 됩니다.

다음 샘플 코드와 같이 PrincipalPermissionAttribute가 각 작업에 적용되어 호출자가 Windows 관리자 그룹의 일부여야 한다는 것을 요구합니다.

[PrincipalPermission(SecurityAction.Demand,
                             Role = "Builtin\\Administrators")]
public double Add(double n1, double n2)
{
    double result = n1 + n2;
    return result;
}

샘플을 실행하면 작업 요청 및 응답이 클라이언트 콘솔 창에 표시됩니다. 클라이언트는 관리자 그룹의 일부인 계정으로 실행 중인 경우 각 작업과 통신할 수 있고, 그렇지 않은 경우 액세스가 거부됩니다. 권한 부여 오류를 테스트하려면 관리자 그룹의 일부가 아닌 계정으로 클라이언트를 실행합니다. 클라이언트를 종료하려면 콘솔 창에서 Enter 키를 누릅니다.

IErrorHandler를 구현하여 권한 부여 오류를 서비스에 알릴 수 있습니다. IErrorHandler 구현에 대한 내용은 오류 처리 및 보고에 대한 제어 확장을 참조하세요.

샘플을 설치, 빌드 및 실행하려면

  1. Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.

  2. C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Building the Windows Communication Foundation Samples의 지침을 따릅니다.

  3. 단일 컴퓨터 또는 다중 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.