Проблема с проверкой подлинности Windows с использованием iisnode и WebMatrix - PullRequest
1 голос
/ 21 декабря 2011

Я пытался написать простой сайт, используя node.js, размещенный на IIS Express 7.5 (через WebMatrix).Я хотел бы использовать встроенную проверку подлинности Windows.

Я настроил applicationhost.config , как описано в некоторых аналогичных публикациях.Также я настроил web.config .

<system.webServer>
    <security>
        <authentication>
            <anonymousAuthentication enabled="false" />
            <basicAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

Теперь при запросе сайта он запрашивает учетные данные.Это довольно хорошо на данный момент.Затем я предоставляю правильные учетные данные домена и получил ошибку 401.1

Ну, сайт в доверенной зоне и Фидлер сказали, что предоставлены билеты Kerberos.

Что не так?

Я проверил трассировку и получил следующую ошибку:

<EventData>
  <Data Name="ContextId">{00000000-0000-0000-3F03-0080000000F8}</Data>
  <Data Name="ModuleName">WindowsAuthenticationModule</Data>
  <Data Name="Notification">2</Data>
  <Data Name="HttpStatus">401</Data>
  <Data Name="HttpReason">Unauthorized</Data>
  <Data Name="HttpSubStatus">1</Data>
  <Data Name="ErrorCode">2147942485</Data>
  <Data Name="ConfigExceptionInfo"></Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>MODULE_SET_RESPONSE_ERROR_STATUS</Opcode>
<Keywords>
  <Keyword>RequestNotifications</Keyword>
</Keywords>
<freb:Description Data="Notification">AUTHENTICATE_REQUEST</freb:Description>
<freb:Description Data="ErrorCode">The local device name is already in use. (0x80070055)</freb:Description>
</RenderingInfo>

Хорошо, тогда я пытался выяснить проблему в течение нескольких часов и обнаружил, что если удалить правила или Модуль перезаписи URL из web.config

    <rewrite>
        <rules>
            <!-- Don't interfere with requests for logs -->
            <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
                <match url="^[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$" />
            </rule>

            <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
            <rule name="StaticContent">
                <action type="Rewrite" url="public{REQUEST_URI}" />
            </rule>

            <!-- All other URLs are mapped to the Node.js application entry point -->
            <rule name="DynamicContent">
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                </conditions>
                <action type="Rewrite" url="app.js" />
            </rule>
        </rules>
    </rewrite>

тогда все будет отлично работать (кроме правильной обработки app.js)

Итак, вопрос в том, как сохранить оригинальный шаблон node.js для WebMatrixи использовать проверку подлинности Windows без такой ошибки?

Еще один вопрос - как получить всю контекстную информацию, собранную конвейером модулей IIS в node.js ??

1 Ответ

1 голос
/ 21 декабря 2011

Начиная с iisnode v0.1.13, информация, собранная конвейером IIS, не предоставляется приложению node.js.Это известное ограничение, которое будет устранено https://github.com/tjanczuk/iisnode/issues/87 и https://github.com/tjanczuk/iisnode/issues/94.

Проблема с аутентификацией при использовании правил перезаписи требует изучения;создано https://github.com/tjanczuk/iisnode/issues/127.

...