2

정의 된 사용자/그룹 만 액세스 할 수 있도록 IIS 7에서 호스팅되는 wcf 서비스를 구성하는 방법.정의 된 그룹 또는 사용자가 제한하는 Windows 인증을 사용하여 IIS 7에서 호스팅되는 보안 WCF 서비스

기존 구성 :

<authentication mode="Windows"/> 

<services>  
<service name="MyService.Test" behaviorConfiguration="MyService.TestBehavior"> 
    <endpoint address="" binding="wsHttpBinding" contract="MyService.ITest"> 
    <identity> 
    <dns value="localhost"/> 
    </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 
</services> 
<behaviors> 
<serviceBehaviors> 
    <behavior name="MyService.TestBehavior"> 
    <serviceMetadata httpGetEnabled="true"/> 
    <serviceDebug includeExceptionDetailInFaults="true"/>   
    </behavior>   
</serviceBehaviors> 
</behaviors> 

나는 권한의 Web.config 또는 파일이나 폴더의 파일 시스템 중 하나 (사용자 또는 그룹)를 구성하는 다음합니다.

답변

2

우선, 인트라넷 환경에 있다면 netTcpBinding으로 전환 할 수 있고 전환 할 수 있어야합니다. 더 빠르고 유연하며 어느 누구도 외부에서 (방화벽 이상으로) 전화를 걸 수는 없습니다.

다음은 Windows 자격 증명이 기본적으로 wsHttpBinding 및 netTcpBinding에서 설정되어 있습니다. WCF 세계에서는 일반적으로 파일이나 폴더를 보호하지 않습니다. 서비스 호출을 보호하고 Windows 자격 증명을 사용하면 손쉽게 구현할 수 있습니다. 서비스 구현에 PrincipalPermission 특성을 추가하기 만하면됩니다.

class MyService : IMyService 
{ 
    [PrincipalPermission(SecurityAction.Demand, Role="SysAdmin")] 
    public void SensitiveMethod() 
    { 
    .... 
    } 
} 

잘 작동해야합니다.

정말로 파일과 폴더를 보호해야하는 경우 언제든지 web.config 파일을 사용하고 Windows 사용자 이름과 그룹을 기반으로 일반적인 액세스 권한을 지정할 수 있습니다.하지만 WCF와는 아무런 관련이 없습니다.

마크

+0

netTcpBinding을 추가했습니다. 서비스 메서드에 [PrincipalPermission (SecurityAction.Demand, Role = "domain \ role")]을 추가하면 항상 액세스가 거부됩니다. 인터페이스의 서비스 메소드에만 추가하면 작동하지 않습니다. web.config에 뭔가를 추가해야합니까? –

+0

단지'[PrincipalPermission (SecurityAction.Demand, Role = 'Role')]'- ** NOT ** ** Role = "domain \ role"만 사용하면됩니다 - Role = 'role'만 –

+0

예! 제대로 작동하려면 다음 단계를 수행했습니다. - 기본 포트 808을 사용하는 NON-HTTP 활성화를 다시 설치했습니다. - web.config에 추가되었습니다. - IIS-IUSRS 용 폴더를 공유 함 (http://msdn.microsoft.com/en-us/library/ms751432.aspx 참조) - PrincipalPermission을 my에 추가했습니다. 암호. web.config에서 직접 권한을 변경할 수 있습니까? –

관련 문제