簡體   English   中英

NodeJS + Express + Passport + IIS

[英]NodeJS + Express + Passport + IIS

我正在部署使用Windows身份驗證的node + express應用程序。 我為此遵循了PassportJS windows-auth文檔。 但我面臨錯誤=>

處理請求時,iisnode遇到錯誤。

HRESULT:0x2 HTTP狀態:500 HTTP subStatus:1002 HTTP原因:內部服務器錯誤您收到此HTTP 200響應,因為system.webServer/iisnode/@devErrorsEnabled配置設置為“true”。

除了node.exe進程的stdout和stderr的日志之外,請考慮使用調試和ETW跟蹤來進一步診斷問題。

node.exe進程生成到stderr的最后64k輸出如下所示:

應用程序拋出未捕獲的異常並終止:錯誤:身份驗證策略必須在Object的Passport.use(C:\\ Workspace \\ Trial \\ node_modules \\ passport \\ lib \\ passport \\ index.js:51:20)中具有名稱。 (C:\\ Workspace \\ Trial \\ server.js:7:10)在Module._compile(internal / modules / cjs / loader.js:689:30)的Object.Module._extensions..js(internal / modules / cjs) /loader.js:700:10)在Function.Module的tryModuleLoad(internal / modules / cjs / loader.js:538:12)的Module.load(internal / modules / cjs / loader.js:599:32)。 _load(internal / modules / cjs / loader.js:530:3)在Module.require(internal / modules / cjs / loader.js:637:17)at require(internal / modules / cjs / helpers.js:22: 18)在對象。 (C:\\ Program Files(x86)\\ iisnode \\ interceptor.js:210:1)

server.js

                <configuration>
            <system.webServer>
               <iisnode promoteServerVars="LOGON_USER" />
                <handlers>
                    <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
                </handlers>
                <rewrite>
                    <rules>
                        <rule name="sendToNode">
                            <match url="/*" />
                            <action type="Rewrite" url="server.js" />
                        </rule>
                    </rules>
                </rewrite>
            </system.webServer>
            <system.web>
                    <authentication mode="Windows" />
            </system.web>
            </configuration>

web.config中

            var express = require('express');

            var app = express();
            var passport = require('passport');
            var WindowsStrategy = require('passport-windowsauth');

            passport.use(function(profile, done){
              User.findOrCreate({ waId: profile.id }, function (err, user) {
                done(err, user);
              });
            });

            app.get('/NodeTrialLogon/', function (req, res) {
                res.send('Express is workin on IISNode!');
            });

            app.get('/NodeTrialLogon/express-passport',
              passport.authenticate('WindowsAuthentication'),
              function (req, res){
                res.json(req.user);
              });
            app.listen(process.env.PORT);

請幫忙。 我在IIS中啟用了Windows身份驗證,並禁用了所有其他形式的身份驗證。

好像你導入了WindowsStrategy但從未使用它。 你可以嘗試以下(如本GitHub問題所示

passport.use(new WindowsStrategy({
    integrated: true
  },
  function(profile, done) {
    User.findOrCreate({ waId: profile.id }, function (err, user) {
      done(err, user);
    });
  }
));

然后你也可以給你的策略命名,作為passport.use()的第一個參數。

passport.use('MyAuthStrategy', new WindowsStrategy(
  // ...
));

然后在經過身份驗證的路由中指定此名稱

passport.authenticate('MyAuthStrategy')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM