Authorizing Access to Service Operations
이 샘플에서는 PrincipalPermissionAttribute 특성을 사용하여 서비스 작업에 대한 액세스 권한을 부여할 수 있도록 <serviceAuthorization> element를 사용하는 방법을 보여 줍니다. 이 샘플은 Getting Started 샘플 샘플을 기반으로 합니다. 서비스와 클라이언트는 wsHttpBinding Element를 사용하여 구성되었습니다. Security element의 mode 특성은 Message로 설정되었고, clientCredentialType은 Windows로 설정되었습니다. PrincipalPermissionAttribute는 각 서비스 메서드에 적용되고 각 작업에 대한 액세스를 제한하는 데 사용됩니다. 호출자는 각 작업에 액세스하기 위해 Windows 관리자여야 합니다.
이 샘플에서 클라이언트는 콘솔 응용 프로그램(.exe)이고 서비스는 IIS(인터넷 정보 서비스)를 통해 호스팅됩니다.
참고: |
---|
이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다. |
서비스 구성 파일은 <serviceAuthorization> element를 사용하여 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>
principalPermissionMode를 UseWindowsGroups로 설정하면 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
구현에 대한 자세한 내용은 Extending Control Over Error Handling and Reporting을 참조하십시오.
샘플을 설치, 빌드 및 실행하려면
Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.
C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.
단일 컴퓨터 또는 다중 컴퓨터 구성에서 샘플을 실행하려면 Running the Windows Communication Foundation Samples의 지침을 따릅니다.