我尝试使用IIS Express 7.5上托管的node.js(通过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
好吧,受信任区域的网站和Fidler提供了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>
好的,然后我试图找出问题几个小时,只发现如果从web.config删除规则或 URL重写模块
<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)
那么,问题是如何为WebMatrix保留原始node.js模板并使用Windows身份验证而没有这样的错误?
还有一个问题是如何获取node.js中IIS模块管道收集的所有Context信息?
答案 0 :(得分:1)
从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。