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

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

Вопрос

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

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

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

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

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

моя_машина\IWAM_моя_машина

Я отключаю встроенную безопасность и оставляю учетную запись домена с анонимным доступом, и получаю то же самое (¿?)

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


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 происходит то же самое, но если я заменяю бассейн Canfiguration, я получаю следующую информацию от Whoami

NT AUTHORITY\СЕТЕВАЯ СЛУЖБА

NT AUTHORITY\МЕСТНАЯ СЛУЖБА

NT AUTHORITY\СИСТЕМА

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

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

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/275269ee-1b9f-4869-8d72-c9006b5bd659.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 etwork 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