COMException во время аутентификации при удаленном управлении IIS с помощью Microsoft.Web.Administration - PullRequest
7 голосов
/ 14 июля 2011

Сценарий:

Мне нужно удаленно администрировать сервер IIS (создавать и уничтожать приложения), который находится в том же домене, что и сервер, запрашивающий изменения.У меня есть пул приложений, настроенный для работы под авторизованной учетной записью.Я протестировал удаленную настройку с помощью диспетчера IIS и учетной записи, под которой веб-пул успешно работает, поэтому я знаю, что разрешения правильные.

Ошибка, которую я получаю при выполнении этого с помощью кода, такова:

Type=System.Runtime.InteropServices.COMException
Source=mscorlib
Message=Retrieving the COM class factory for remote component with CLSID {2B72133B-3F5B-4602-8952-803546CE3344} from machine <SERVERNAME> failed due to the following error: 800706ba <SERVERNAME>.

Если я посмотрю журналы событий на удаленной машине IIS, на которой я пытаюсь пройти аутентификацию, я увижуследующая ошибка.

Log Name:      Security
Source:        Microsoft-Windows-Security-Auditing
Date:          7/13/2011 5:20:22 PM
Event ID:      4625
Task Category: Logon
Level:         Information
Keywords:      Audit Failure
User:          N/A
Computer:      FQDN.local
Description:
An account failed to log on.

Subject:
    Security ID:        NULL SID
    Account Name:       -
    Account Domain:     -
    Logon ID:       0x0

Logon Type:         3

Account For Which Logon Failed:
    Security ID:        NULL SID
    Account Name:       UserName
    Account Domain:     DOMAIN

Failure Information:
    Failure Reason:     An Error occured during Logon.
    Status:         0xc00002ee
    Sub Status:     0x0

Process Information:
    Caller Process ID:  0x0
    Caller Process Name:    -

Network Information:
    Workstation Name:   -
    Source Network Address: -
    Source Port:        -

Detailed Authentication Information:
    Logon Process:      Kerberos
    Authentication Package: Kerberos
    Transited Services: -
    Package Name (NTLM only):   -
    Key Length:     0

This event is generated when a logon request fails. It is generated on the computer where access was attempted.

The Subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.

The Logon Type field indicates the kind of logon that was requested. The most common types are 2 (interactive) and 3 (network).

The Process Information fields indicate which account and process on the system requested the logon.

The Network Information fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.

The authentication information fields provide detailed information about this specific logon request.
    - Transited services indicate which intermediate services have participated in this logon request.
    - Package name indicates which sub-protocol was used among the NTLM protocols.
    - Key length indicates the length of the generated session key. This will be 0 if no session key was requested.
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" />
    <EventID>4625</EventID>
    <Version>0</Version>
    <Level>0</Level>
    <Task>12544</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8010000000000000</Keywords>
    <TimeCreated SystemTime="2011-07-13T21:20:22.234292500Z" />
    <EventRecordID>12046</EventRecordID>
    <Correlation />
    <Execution ProcessID="556" ThreadID="8984" />
    <Channel>Security</Channel>
    <Computer>FQDN.local</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="SubjectUserSid">S-1-0-0</Data>
    <Data Name="SubjectUserName">-</Data>
    <Data Name="SubjectDomainName">-</Data>
    <Data Name="SubjectLogonId">0x0</Data>
    <Data Name="TargetUserSid">S-1-0-0</Data>
    <Data Name="TargetUserName">UserName</Data>
    <Data Name="TargetDomainName">DOMAIN</Data>
    <Data Name="Status">0xc00002ee</Data>
    <Data Name="FailureReason">%%2304</Data>
    <Data Name="SubStatus">0x0</Data>
    <Data Name="LogonType">3</Data>
    <Data Name="LogonProcessName">Kerberos</Data>
    <Data Name="AuthenticationPackageName">Kerberos</Data>
    <Data Name="WorkstationName">-</Data>
    <Data Name="TransmittedServices">-</Data>
    <Data Name="LmPackageName">-</Data>
    <Data Name="KeyLength">0</Data>
    <Data Name="ProcessId">0x0</Data>
    <Data Name="ProcessName">-</Data>
    <Data Name="IpAddress">-</Data>
    <Data Name="IpPort">-</Data>
  </EventData>
</Event>

Я много искал по этому вопросу и не нашел ничего, что, кажется, указывает мне правильное направление.Я нашел кое-что, что говорило о лесном доверии, и это могло быть проблемой, но я не специалист по рекламе, и все это зашкаливало.Я чувствую, что соответствующие разрешения на месте, так как я могу заставить это работать, используя Диспетчер IIS просто отлично, это терпит неудачу только при использовании Microsoft.Web.Administration и ServerManager.OpenRemote ()

UPDATE

Я отключил UAC на обеих машинах и добавил сертификат с целевой машины IIS в хранилище сертификатов на запрашивающей машине.По-прежнему получаю ту же ошибку.

1 Ответ

3 голосов
/ 10 августа 2011

звучит странно - только некоторые мысли:

Обновление : Убедитесь, что пользователь имеет право «Действовать как часть операционной системы», пожалуйста, см. нижняя часть этой страницы под заголовком "Особенности Windows Server 2003".

  1. Скорее всего, для меня это звучит как проблема делегирования ограничения Kerberos. Он был введен в Windows Server 2003 и нацелен на ограничение доступа веб-серверов к удаленным ресурсам через Kerberos (поскольку, если веб-сервер скомпрометирован, он становится немного уродливым). Проверьте это, чтобы настроить сервер для делегирования: http://technet.microsoft.com/en-us/library/ee675779.aspx.

  2. Другая идея: проверили ли вы, что ваше клиентское приложение использует учетные данные, которые вы ожидаете от него (возможно, вы уже знаете, но не гарантируется, что оно использует удостоверение пула приложений, особенно если у вас есть что-то вроде <identity impersonate="true"/> в вашем web.config или олицетворение в коде - пожалуйста, проверьте что-то вроде http://retkomma.wordpress.com/2009/07/28/how-to-debug-http-error-401-unauthorized-in-asp-net-via-iis/)?

  3. Последняя идея отладки. Кроме того, вы можете получить более низкое представление о том, успешна ли аутентификация Kerberos, с помощью инструмента, подобного WireShark - kerberos иногда может быть очень неприятным ...

...