NodeJS + Экспресс + Паспорт + IIS - PullRequest
0 голосов
/ 22 марта 2019

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

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

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

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

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

Приложение сгенерировало необработанное исключение и завершено: Ошибка: стратегии аутентификации должны иметь имя в Passport.use (C: \ Workspace \ Trial \ node_modules \ passport \ lib \ passport \ index.js: 51: 20) на объекте. (C: \ Workspace \ Trial \ server.js: 7: 10) в Module._compile (внутренний / modules / cjs / loader.js: 689: 30) в Object.Module._extensions..js (внутренний / modules / cjs / loader.js: 700: 10) в Module.load (внутренний / modules / cjs / loader.js: 599: 32) в tryModuleLoad (внутренняя / modules / cjs / loader.js: 538: 12) в Function.Module._load (внутренняя / modules / cjs / loader.js: 530: 3) в Module.require (внутренняя / modules / cjs / loader.js: 637: 17) по требованию (внутренняя / 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);

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

1 Ответ

0 голосов
/ 14 мая 2019

Кажется, вы импортируете 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...