사용자 자격 증명 - 통합 보안을 사용하여 서버에서 HTTP 게시물 만들기

StackOverflow https://stackoverflow.com/questions/1046513

문제

사용자 자격 증명을 사용하여 ASP Classic Server Side Page에서 게시물을 만들려고합니다 ...

MSXML2.serverxmlhttp를 사용하여 프로그래밍 방식으로 게시물을 작성하고 있습니다

IIS 5.1 사이트에서 여러 구성을 시도했지만 지정된 계정으로 IIS를 실행할 수있는 방법은 없습니다 ...

나는 내가 사용하는 IIS 프로세스의 계정을 확인하기 위해 Whoami를 실행하는 작은 ASP 페이지를 만들었습니다.

IIS 5.1을 사용하면 통합 보안을 사용하여 프로세스가 사용합니다.

my_machine iwam_my_machine

통합 보안을 비활성화하고 도메인 계정을 익명 액세스로 남겨두고 동일하게 얻습니다 (¿?).

사용자를 테스트하기 위해 다음을 수행합니다


private function whoami()
dim shell, cmd

    set shell = createObject("wscript.shell") 
    set cmd = shell.exec( server.mapPath( "whoami.exe" ) )
    whoami = cmd.stdOut.readAll() 
    set shell = nothing: set cmd = nothing 

end function

쉘 명령을 발행하기 때문입니까?

통합 보안과 함께 작동하는 다른 사이트로 http 우편 통화를하고 싶습니다 ...

따라서 자격 증명을 전달하거나 최소한 지정된 계정으로 실행 한 다음 해당 계정을 추력하도록 원격 사이트를 구성 할 수있는 방법이 필요합니다.

사이트를 통합 보안으로 작동하도록 설정하는 것만으로도 충분할 것이라고 생각했습니다 ...

그런 일을 어떻게 달성 할 수 있습니까?

추신 : IIS6을 사용하면 동일하게 발생하지만 수영장을 변경하면 whoami로부터 다음 정보를 얻습니다.

NT Authority 네트워크 서비스

NT Authority 지역 서비스

NT Authority 시스템

도메인 계정을 설정하면 "서비스 할 수없는 서비스"메시지가 나타납니다 ...

편집 : 이것을 찾았습니다

http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/iis/275269ee-1b9f-4869-8d72-c9006bd659.mspx?mfr=true

"인증 된 사용자가 요청을한다면 스레드 토큰은 사용자의 인증 된 계정을 기반으로합니다"라고 말하지만, 어떻게 든 그렇게 작동하지 않는 것 같습니다 ... 무엇을 놓칠 수 있을까요?

편집하다:

글쎄, whoami는 분명히 나를 속이고 있습니다. 나는 다음 기능으로 시도했습니다.


private function whoami_db( serverName, dbName )
dim conn, data

set conn = server.createObject("adodb.connection")
conn.open       "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
                        "Initial Catalog=" & dbName & ";Data Source=" & serverName
set data = conn.execute( "select suser_sname() as user_name" )

whoami_db = data("user_name")

data.close: conn.close
set data = nothing: set conn = nothing

엔드 기능

그리고 모든 것이 잘 작동하는 것 같았습니다 ...

그러나 msxml2.serverxmlhttp를 사용자 자격 증명과 함께 작동시키는 방법은 무엇입니까 ???

도움이 되었습니까?

해결책

당신은 정확합니다. whoami.exe는 당신을 혼란스럽게했습니다. 별도의 프로세스를 시작하면 새 프로세스가 현재 프로세스의 사용자로 실행되었습니다. XP에서 COM+ 응용 프로그램 호스트 (DLLHOST)이며 일반적으로 다음과 같이 실행됩니다. IWAM_<machine>. IIS6에서는 w3wp.exe 작업 프로세스가 진행되며 일반적으로 NT Authority Network Service로 실행됩니다.

그러나 HTTP 요청을 처리하는 스레드는 다른 보안 토큰을 가장합니다. SSPI 실험이 나오면서 요청을하는 사용자의 보안 토큰이 발견 된 결과 통합 보안을 통해이를 통해 사용자의 보안 토큰이 있습니다. 익명 액세스를 사용하면 사이트/응용 프로그램에 구성된 익명 사용자가 사용됩니다. 일반적으로 <MACHINE>\IUSR_<machine>.

ServerXMLHTTP의 특정 문제에 관해서는 기본 구성 요소 WinHTTP로 돌아갑니다. 이는 기본적으로 액세스중인 서버가 프록시 우회 목록 인 경우 현재 사용자 자격 증명 만 전송합니다. 그럼에도 불구하고 ServerXMLHTTP는 사용자 자격 증명을 절대 보내지 않도록 구성 할 수 있습니다. 해당 시나리오를 직접 테스트하지 않습니다.

불행히도 ServerXMLHTTP는 WINHTTP의 구성 세부 사항에 대한 매우 제한된 액세스를 제공합니다. 그러나 이것이 쇼 스토퍼라면 항상 winhttp 구성 요소를 직접 사용할 수 있습니다.

Dim oWinHTTP
Dim oDOM

    Const AutoLogonPolicy_Always = 0

Set oWinHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")

oWinHTTP.SetAutoLogonPolicy AutoLogonPolicy_Always

oWinHTTP.Open "GET", "http://remoteserver.org/getsomexml.xxx", False
oWinHTTP.Send

If oWinHTTP.Status = 200 Then
    Set oDOM = CreateObject("MSXML2.DOMDocument.3.0")
    oDOM.async = false
    oDOM.Load oWinHTTP.ResponseStream     
End If

Set oWinHTTP = Nothing

그것은 HTTP에서 작동해야합니다. HTTPS는 정말 지저분 해집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top