Петля для паспорта Saml

Я пытаюсь выполнить идентификацию ADFS с помощью Passport-Saml.js в проекте nodejs / angularjs.

  1. Когда я подключаюсь к своему веб-сайту, я правильно перенаправляюсь на свой портал ADFS.
  2. Портал ADFS после аутентификации правильно перенаправляет на обратный вызов.
  3. Затем цикл обратного вызова.

Консоль Chrome во время цикла

Это мой маршрут (server.js):

app.post('/login/callback',
 function (req, res, next) {
  console.log('before');
  passport.authenticate('saml', function (err, user, info){
    console.log('good');

})(req, res, next);

});

Я думаю, что он перестает работать в паспортном файле = "http://i.stack.imgur.com/KLLF0.png" rel = "noreferrer"> Консоль

И моя конфигурация паспорта (/config/passport.js):

var
 fs = require('fs')
 , passport = require('passport')
 , SamlStrategy = require('passport-saml').Strategy
;

passport.serializeUser(function (user, done) {
 done(null, user);
});
passport.deserializeUser(function (user, done) {
 done(null, user);
});

passport.use(new SamlStrategy(
{
  entryPoint: 'https://logon.XXX.com/adfs/ls/',
  issuer: 'urn:backpack-test',
  callbackUrl: ' https://backpack-test.XXX.com/login/callback',
  cert: 'MIIC6D...,
  authnContext:         'http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/password',
  //acceptedClockSkewMs: -1,
  identifierFormat: null,
  //signatureAlgorithm: 'sha256'
},
function (profile, done) {
 return done(null,
  {
        upn: profile['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn'],
        // e.g. if you added a Group claim
        group: profile['http://schemas.xmlsoap.org/claims/Group']
    });
    }
    ));

module.exports = passport;

Я подозреваю, что мои настройки могут быть неправильными, но есть ли какой-либо подробный журнал паспорта-Saml, чтобы сузить поиск и устранение неполадок.


person Vincent LEAL    schedule 06.01.2016    source источник
comment
Не могли бы вы разобраться, в чем проблема?   -  person perseus    schedule 23.02.2016


Ответы (2)


Может быть, это проблема: Проверьте эту ошибку

Просто добавьте body-parser

var bodyParser = require('body-parser');
...
app.use(bodyParser.urlencoded({extended: true}));

У меня это сработало. Может быть, это поможет другим ...

person perseus    schedule 26.02.2016
comment
Была такая же проблема с петлей. Добавление bodyParser решило мою проблему. - person Li'; 09.12.2020

Спасибо Персею, ​​добавлю только примечание. Я использовал:

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '5mb'}));

и я думал, что этого достаточно, но этого не произошло, потому что парсер тела игнорировал запросы с кодировкой urlencoded. Поэтому мне пришлось указать оба:

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '5mb'}));
app.use(bodyParser.urlencoded({extended: true}));
person Matteo Gallinucci    schedule 13.05.2020