TCP 채널 인증

이 항목은 이전 버전의 기존 응용 프로그램과의 호환성을 위해 유지되고 있으나 새로운 개발에는 권장되지 않는 레거시 기술에 대해 설명합니다. 분산 응용 프로그램은 이제 WCF(Windows Communication Foundation)를 사용하여 개발됩니다.

TCP 채널은 인증 및 가장을 직접 지원합니다. 이 항목에서는 클라이언트 및 서버 채널을 구성하는 방법에 대해 설명합니다.

.NET Framework를 사용하면 원격 개체의 서버가 연결된 TcpServerChannelTcpClientChannel 개체의 속성을 설정하여 호출자를 인증하고 가장할 수 있습니다.

서버 구성

원격 호출자를 인증하도록 TCP 서버 채널을 구성하려면 다음 구성 파일과 같이 TCP 채널의 secure 속성을 true로 설정합니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="tcp" secure="true" />
             </channels>
        </application>
    </system.runtime.remoting>
</configuration>
59hafwyt.note(ko-kr,VS.100).gif참고:
보안 통신을 사용하려면 클라이언트 채널의 secure 속성도 true로 설정해야 합니다. 기본적으로 보안 통신에는 서버와 클라이언트 간에 전송된 데이터의 인증과 암호화가 포함됩니다.

CurrentPrincipal을 가져온 다음 Identity 속성에 액세스하여 인증된 클라이언트의 ID에 액세스할 수 있습니다. 가장된 클라이언트의 ID는 GetCurrent로 액세스할 수 있습니다. 필요한 경우 고유한 권한 부여를 수행할 수 있습니다.

원격 호출자를 인증 및 가장하도록 TCP 서버 채널을 구성하려면 다음 구성 파일과 같이 secure 속성과 impersonate 속성을 true로 설정합니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="tcp" secure="true" impersonate="true" />
             </channels>
        </application>
    </system.runtime.remoting>
</configuration>
59hafwyt.note(ko-kr,VS.100).gif참고:
가장을 사용하려면 클라이언트 채널의 tokenImpersonationLevel 속성을 impersonation 또는 delegation으로 설정해야 합니다. 서버에서는 이 속성을 impersonate라고 하지만 클라이언트에서는 tokenImpersonationLevelimpersonation으로 설정합니다.

59hafwyt.note(ko-kr,VS.100).gif참고:
모든 프로세스가 표준 사용자 계정으로 Windows Vista에서 실행됩니다. 표준 사용자는 관리자 계정을 가장할 수 없습니다. 관리자 계정을 가장해야 하는 원격 응용 프로그램이 있는 경우 높은 권한으로 해당 응용 프로그램을 실행해야 합니다.

authorizationModule 속성을 사용하면 서버가 고유한 권한 부여를 수행할 수 있습니다. 이 속성을 사용하려면 IAuthorizeRemotingConnection을 구현하는 클래스를 만들어야 합니다. 이 인터페이스에는 다음과 같은 메서드가 있습니다.

  • IsConnectingEndpointAuthorized. IP 주소로 클라이언트를 인증할 수 있도록 합니다.

  • IsConnectingIdentityAuthorized. ID로 클라이언트를 인증할 수 있도록 합니다.

다음 구성 파일과 같이 서버의 구성 파일에서 authorizationModule 속성을 "namespace.class, assembly" 형식의 문자열로 IAuthorizeRemotingConnection을 구현하는 클래스로 설정합니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application name="AuthorizationApp">
      <service>
        <wellknown mode="SingleCall"
                   type="Server.SampleService, Server"
                   objectUri="Server.rem"/>
      </service>

      <channels>
        <channel ref="tcp" port="8001" secure="true" impersonate="true" authorizationModule="Server.AuthorizationModule,Server"/>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>

클라이언트 구성

호출자를 인증하도록 TCP 클라이언트 채널을 구성하려면 다음 구성 파일과 같이 TCP 채널의 secure 속성을 true로 설정합니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="tcp" secure="true" />
             </channels>
        </application>
    </system.runtime.remoting>
</configuration>
59hafwyt.note(ko-kr,VS.100).gif참고:
보안 통신을 사용하려면 서버 채널의 secure 속성도 true로 설정해야 합니다. 기본적으로 보안 통신에는 서버와 클라이언트 간에 전송된 데이터의 인증과 암호화가 포함됩니다.

가장을 사용하도록 TCP 클라이언트 채널을 구성하려면 다음 구성 파일과 같이 secure 속성을 true로 설정하고 tokenImpersonationLevel 속성을 impersonation으로 설정합니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="tcp" secure="true" tokenImpersonationLevel="impersonation"/>
             </channels>
        </application>
    </system.runtime.remoting>
</configuration>
59hafwyt.note(ko-kr,VS.100).gif참고:
가장을 사용하려면 서버 채널의 impersonate 속성을 true로 설정해야 합니다. 서버에서는 이 속성을 impersonate라고 하지만 클라이언트에서는 tokenImpersonationLevelimpersonation으로 설정됩니다.

59hafwyt.note(ko-kr,VS.100).gif참고:
모든 프로세스가 표준 사용자 계정으로 Windows Vista에서 실행됩니다. 표준 사용자는 관리자 계정을 가장할 수 없습니다. 관리자 계정을 가장해야 하는 원격 응용 프로그램이 있는 경우 높은 권한으로 해당 응용 프로그램을 실행해야 합니다.

tokenImpersonationLevel을 다음 표에 있는 값 중 하나로 설정할 수 있습니다.

tokenImpersonationLevel 설정 설명

Identification

서버는 보안 식별자 및 권한과 같은 클라이언트에 대한 정보를 얻을 수 있지만 클라이언트를 가장할 수 없습니다.

Impersonation

서버는 로컬 시스템에서 클라이언트의 보안 컨텍스트를 가장할 수 있습니다. 원격 시스템에서는 서버가 클라이언트를 가장할 수 없습니다.

Delegation

원격 시스템에서는 서버가 클라이언트를 가장할 수 있습니다.

기본적으로 TCP 클라이언트 채널은 클라이언트 프로세스 실행하는 사용자 ID로 자신을 인증합니다. 다음 코드 샘플과 같이 domain, usernamepassword 속성을 설정하여 대체 ID를 지정하면 대체 ID를 지정할 수 있습니다.

RemotingConfiguration.Configure("Client.exe.config", true);
ISharedInterface remoteObject = (ISharedInterface)Activator.GetObject(
                typeof(ISharedInterface),
                "tcp://localhost:8001/server.rem");

// Set domain, username, and password
IDictionary props = ChannelServices.GetChannelSinkProperties(remoteObject);
props["domain"] = "SomeDomain"; // only required if the user is a member of a domain
props["username"] = "SomeRemotingUser";
props["password"] = "Password123";

// Call method on remote object
remoteObject.HelloWorld("Hi Server");

구성 파일에서 domain, usernamepassword 속성을 지정할 수도 있습니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="tcp" 
                       secure="true" 
                       tokenImpersonationLevel="impersonation"
                       username="SomeRemotingUser"
                       password="Password123"
                       />
             </channels>
        </application>
    </system.runtime.remoting>
</configuration>
59hafwyt.note(ko-kr,VS.100).gif참고:
코드나 구성에 사용자 이름과 암호를 하드 코딩하지 않는 것이 좋습니다. 여기에서는 설명의 목적으로만 하드 코딩했습니다. 자격 증명을 가져오는 가장 좋은 방법은 사용자에게 묻는 것입니다.

기본적으로 TCP 채널은 NTLM을 사용하여 호출자를 인증합니다. 채널에서 Kerberos를 사용하도록 강제하려면 다음 구성 파일과 같이 서비스를 실행하는 계정으로 servicePrincipalName 속성을 설정합니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="tcp" secure="true" tokenImpersonationLevel="impersonation"
                       servicePrincipalName="MyDomain\MyUserAccount"/>
          </channels>
        </application>
    </system.runtime.remoting>
</configuration>
59hafwyt.note(ko-kr,VS.100).gif참고:
Kerberos는 Active Directory 서버에 액세스할 수 있어야 합니다. 코드를 실행하는 컴퓨터가 Active Directory 도메인의 멤버가 아닌 경우 대신 NTLM(기본값)을 사용하십시오.

참고 항목

개념

암호화 및 메시지 무결성
HTTP 채널 인증
IPC 채널 인증