2011-12-15 3 views
1

HttpModule에 데이터베이스 호출을 추가해야합니다. IIS에서 호스팅하는 WCF 서비스에 사용하는 것과 동일한 연결 문자열을 사용했지만 HttpModule은 인증 할 수 없습니다. (우리는 Windows 인증을 사용하고 WCF 서비스가 인증을합니다.)HttpModule을 SqlServer에 인증하는 방법

오류 메시지는 사용자 도메인 \ machinename $ '에 대해 로그인 실패입니다.

Sql Server 2008에서 HttpModule을 인증 받으려면 어떻게해야합니까?

+0

당신의 SQL 사용자 이름과 연결 문자열에 지정된 암호 또는 있습니까 구현 :

, 귀하의 using이에

using System.Web.Security; using System.Runtime.InteropServices; using System.Security.Principal; 

쓰기 다음과 같은 방법으로 이러한 추가 Windows 인증에 의존하고 있습니까? –

+0

Windows 인증 전용 – edepperson

답변

1

다른 사람이 내가 가지고있는 것과 동일한 문제에 부딪히는 경우를 대비해 여기에 답이 나와 있습니다. 대부분의 코드는 MSDN 사이트에서 가져온 것입니다 ... 작동합니다. 하지만 기본적으로 원하는 것은 사용자를 가장하는 것입니다.

을 필요한 곳에

private bool impersonateValidUser(String userName, String domain, String password) 
{ 
    WindowsIdentity tempWindowsIdentity; 
    IntPtr token = IntPtr.Zero; 
    IntPtr tokenDuplicate = IntPtr.Zero; 

    if (RevertToSelf()) 
    { 
     if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE, 
      LOGON32_PROVIDER_DEFAULT, ref token) != 0) 
     { 
      if (DuplicateToken(token, 2, ref tokenDuplicate) != 0) 
      { 
       tempWindowsIdentity = new WindowsIdentity(tokenDuplicate); 
       impersonationContext = tempWindowsIdentity.Impersonate(); 
       if (impersonationContext != null) 
       { 
        CloseHandle(token); 
        CloseHandle(tokenDuplicate); 
        return true; 
       } 
      } 
     } 
    } 
    if (token != IntPtr.Zero) 
     CloseHandle(token); 
    if (tokenDuplicate != IntPtr.Zero) 
     CloseHandle(tokenDuplicate); 
    return false; 
} 

if (impersonateValidUser("username", "domain", "password")) 
{ 
// code that needs to access Db 
// make sure you undo when no longer needed 
impersonationContext.Undo(); 
} 
관련 문제