'Windows API'에 해당되는 글 1건

  1. 2006.07.15 [Article]LogonUser API에서 LogonType 파라미터
C# & VB.NET2006. 7. 15. 01:19

LogonUser 함수는 Windows API의 일부이지만, .NET에서 Impersonation을 코드로 구현할 때 쓰이기도 한다.
How to implement impersonation in an ASP.NET application(http://support.microsoft.com/default.aspx?scid=kb;en-us;Q306158) 문서를 보면 그 자세한 방법을 알 수 있다.


그런데 이 함수의 스펙을 보면, LogonType이라는 파라미터가 있는 것을 알 수 있다. 이 파라미터는 로그온 유형을 정의하는데, 일반적으로 .NET에서 Impersonation 용도로 사용할 때에는 Interactive 모드를 사용하게 된다. 하지만 실제로는 이 것 말고도 몇 가지 유형이 더 있다. 다음은 이 파라미터에서 선택할 수 있는 모든 유형에 대한 설명이다. (MSDN 영문 문서를 번역한 것으로, 오역이 있다면 알려주시길 부탁드린다)


LOGON32_LOGON_BATCH - 이 유형은 사용자를 대신해서 프로세스를 처리하는 배치 서버를 위해서 만들어졌다. 또 이 유형은 많은 plaintext 인증시도를 하는 고성능 서버가 사용하기 위해서 만들어 진 것으로, 메일 서버나 웹 서버가 바로 그 예이다. LogonUser 함수는 이 경우에 사용자의 Credential을 캐싱하지 않는다.


LOGON32_LOGON_INTERACTIVE - 이 유형은 컴퓨터를 이용해서 상호작용하는 - 예를 들면 터미널 서버, 원격 셸, 혹은 유사한 프로세스 - 사용자를 위해서 만들어진 것이다. 이 유형은 접속이 끊어졌을 때의 오퍼레이션을 위해서 로그온 정보를 캐싱하기 때문에 부가적인 비용이 소요된다. 그렇기 때문에, 메일 서버와 같은 클라이언트/서버 애플리케이션에는 부적당하다.


LOGON32_LOGON_NETWORK - 이 유형은 plaintext 패스워드로 인증하는 고성능 서버를 위해서 만들어졌다. LogonUser 함수는 이 경우에 Credential을 캐시하지 않는다.


LOGON32_LOGON_NETWORK_CLEARTEXT - 이 유형은 Impersonating하는 동안 다른 서버로 또 연결할 수 있도록, 인증 패키지에 이름과 패스워드를 저장한다. 서버는 클라이언트로부터 plaintext credential을 받을 수 있고, LogonUser 함수를 호출해서, 네트워크에 있는 다른 서버로 접속할 수 있는지 확인하고, 다른 서버와 계속 통신할 수 있다. (NT에서는 지원하지 않는다)


LOGON32_LOGON_NEW_CREDENTIALS - 이 유형은 호출자가 현재의 토큰을 복제해서 외부로 나가는 연결에 대해서 새로운 credential을 지정하게 해준다. 새로운 로그온 세션은 같은 로컬 식별자를 가지지만, 외부 연결에서는 다른 Credential을 가지게 된다. 이 유형은 LOGON32_PROVIDER_WINNT50 프로바이더를 지정했을 때만 지원된다. (NT에서는 지원하지 않는다)


LOGON32_LOGON_SERVICE - 서비스 타입 로그온을 가리킨다. 계정은 반드시 서비스 권한이 활성화되어 있어야 한다.


LOGON32_LOGON_UNLOCK - 이 유형은 GINA(Graphical Identification and Authentication) DLL - Window인증창을 생각하면 된다 - 이 사용한다. 이 유형의 로그인은 워크스테이션이 잠금해제되었다는 유니크한 감사 레코드를 생성한다.

Posted by kkongchi