NodeJS Express Passport IIS

#node.js #express #iis

#node.js #экспресс #iis

Вопрос:

Я развертываю свое приложение node Express, которое использует проверку подлинности Windows. Для этого я следовал документации PassportJS для Windows-аутентификации. Но я сталкиваюсь с ошибкой =>

iisnode обнаружил ошибку при обработке запроса.

Результат: 0x2 Статус HTTP: 500 Подстатус HTTP: 1002 Причина HTTP: Внутренняя ошибка сервера Вы получаете этот ответ HTTP 200, потому что system.webServer/iisnode/@devErrorsEnabled значение параметра конфигурации равно «true».

В дополнение к журналу стандартного вывода и stderr из node.exe в процессе рассмотрите возможность использования трассировок отладки и ETW для дальнейшей диагностики проблемы.

Последние 64 Кб выходных данных, сгенерированных node.exe процесс для stderr показан ниже:

Приложение выдало неперехваченное исключение и завершается: Ошибка: стратегии аутентификации должны иметь имя в Passport.use (C:WorkspaceTrialnode_modulespassportlibpassportindex.js:51:20 ) на объекте. (C:WorkspaceTrialserver.js:7:10 ) в модуле._compile (internal/modules/cjs/loader.js:689:30) в объекте.Module._extensions..js (внутренний/modules/cjs/loader.js:700:10) в модуле.загрузка (внутренняя/modules/cjs/loader.js:599:32) в tryModuleLoad (внутренняя/modules/cjs/loader.js:538:12) в функцию.Модуль._load (внутренний/modules/cjs/loader.js:530:3) в Module.require (внутренний/modules/cjs/loader.js:637:17) в require (внутренний/modules/cjs/helpers.js:22:18) в Object. (C:Program Файлы (x86) iisnodeinterceptor.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);
  

Пожалуйста, помогите. Я включил проверку подлинности Windows в IIS и отключил все другие формы проверки подлинности.

Ответ №1:

Кажется, что вы импортируете 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')