сделать http-сообщение с сервера, используя учетные данные пользователя - встроенная безопасность

Я пытаюсь опубликовать сообщение с боковой страницы классического сервера asp, используя учетные данные пользователя...

Я использую msxml2.ServerXMLHTTP для программного создания сообщения

Я пробовал несколько конфигураций на сайте IIS 5.1, но никак не могу заставить IIS работать с указанной учетной записью...

Я сделал небольшую страницу asp, которая запускает whoami, чтобы проверить, какую учетную запись использует процесс iis...

с IIS 5.1, используя интегрированную безопасность, процесс использует:

моя_машина\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-вызовы на другой сайт, который работает со встроенной безопасностью...

Поэтому мне нужен какой-то способ передать учетные данные или, по крайней мере, запустить с указанной учетной записью, а затем настроить удаленный сайт для передачи этой учетной записи...

Я думал, что достаточно будет просто настроить сайт на работу со встроенной защитой...

Как я могу добиться такого?

PS: с IIS6 происходит то же самое, но если я изменю конфигурацию пула, я получу следующую информацию от whoami

NT AUTHORITY\NETWORK SERVICE

NT AUTHORITY\LOCAL SERVICE

ПОЛНОМОЧИЯ NT\СИСТЕМА

если я устанавливаю учетную запись домена, я получаю сообщение "сервис недоступен"...

редактировать: нашел это

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/275269ee-1b9f-4869-8d72-c9006b5bd659.mspx?mfr=true

он говорит то, что я предположил: «Если аутентифицированный пользователь делает запрос, токен потока основан на аутентифицированной учетной записи пользователя», но почему-то я так не работаю... что я мог упустить?

редактировать:

Ну, эта штука, очевидно, меня обманывает, я попробовал следующую функцию


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

end function

и вроде все нормально работало...

но как заставить msxml2.ServerXMLHTTP работать с учетными данными пользователя???


person opensas    schedule 25.06.2009    source источник


Ответы (1)


Вы правы, 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 это становится очень грязным.

person AnthonyWJones    schedule 26.06.2009
comment
Привет, только что опубликовал вопрос, когда мне нужно получить доступ к URL-адресу https с помощью winhttprequest, и я использую прокси-сервер, требующий встроенной аутентификации. Был бы признателен, если бы вы могли взглянуть на это и помочь с этим грязным битом! stackoverflow.com/questions/61835301/ - person Shadow; 16.05.2020