#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')