SAML / ADFS SSO в MVC Sailsjs с использованием ошибки выброса nodejs: TypeError [ERR_INVALID_CHAR]: недопустимый символ в содержимом заголовка ["Location"] - PullRequest
1 голос
/ 07 июня 2019

Я настраиваю SSO в своем приложении sailsjs, используя ADFS и passport-saml, когда я пытаюсь войти в него, выбрасывая: TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["Location"] вместо перенаправления на наши adfs (IDp)

Iпопробовал два процесса один passport-saml (ссылка - http://www.passportjs.org/packages/passport-saml/), а другой passport-wsdef-saml2 (ссылка - https://github.com/auth0/passport-wsfed-saml2), но получаю одинаковую ошибку с обеими реализациями. Я прошел через этот URL - Руководство по реализации SAML / ADFS node.js? но в коде ничего не найдено. Я помещаю свой код реализации passport-saml здесь.

passport.js - 
passport.use(new SamlStrategy({
    entryPoint: 'https://myadfs.com/adfs​/ls',
    issuer: 'app-identity',
    callbackUrl: 'https://my-app.com/login/callback',
    cert: fs.readFileSync(__dirname + '/ssl/sign.crt', 'utf-8'),
    authnContext: 
'http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/password',
  identifierFormat: null  
  },
  function(profile, done) {
    console.log("data : ", profile );
    var data = {
      email: profile['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'],
      givenname: profile['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'],
      surname: profile['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname']
    }
    done(null, data);
  }));

route.js -

'GET /signin': 'AuthController.dologin',
'post /login/callback': 'AuthController.callback',
'/logout': 'AuthController.logout',`

AuthController.js -
  `dologin: function(req, res) {
    passport.authenticate('saml', (req, res) => {
      res.redirect('/');
    })(req, res);
  },
  callback: [passport.authenticate('saml', {failureRedirect: '/',failureFlash: true}),  function(req, res) {
    console.log(req.body);
    console.log(req.user);
    if (!req.user) {
      throw Error('User not authenticated.');
    }
    res.redirect('/');
  }
  ],
  logout: function(req, res) {
    req.logout();
    res.redirect('/login');
  }

http.js - 
passportInit: require('passport').initialize(),
    passportSession: require('passport').session(),
    order: [
      'cookieParser',
      'session',
      'passportInit',
      'passportSession',
      'bodyParser',
      'compress',
      'poweredBy',
      'router',
      'www',
      'favicon',
    ],

Пожалуйста, помогите мне, яЗастрял даже не смог найти, где проблема на самом деле. Согласно учебникам и выводам, ничего не кажется неправильным, но все же, это не перенаправление на сервер поставщика удостоверений ADFS, и выдает следующую ошибку -

0|app  | TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["Location"]
0|app  |     at ServerResponse.setHeader (_http_outgoing.js:473:3)
0|app  |     at Strategy.strategy.redirect (app/node_modules/passport/lib/middleware/authenticate.js:323:13)
0|app  |     at redirectIfSuccess (app/node_modules/passport-saml/lib/passport-saml/strategy.js:77:12)
0|app  |     at DeflateRaw.requestToUrlHelper [as cb] (app/node_modules/passport-saml/lib/passport-saml/saml.js:361:5)
0|app  |     at DeflateRaw.zlibBufferOnEnd (zlib.js:131:10)
0|app  |     at DeflateRaw.emit (events.js:203:15)
0|app  |     at endReadableNT (_stream_readable.js:1129:12)
0|app  |     at process._tickCallback (internal/process/next_tick.js:63:19)

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

Заранее спасибо.

...