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 name="CalculatorServiceBehavior">
...
<!-- 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>
principlePermissionMode를 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 샘플 빌드의 지침을 따릅니다.
단일 컴퓨터 또는 다중 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.