2

Encore un noob!Passeport-SAML: lire les informations sur l'utilisateur

Je travaille à construire une application Node, et je l'ai déjà configurer divers points finaux nécessaires. L'une des exigences de mon projet est d'utiliser l'authentification en utilisant le mécanisme SAML. J'utilise le passeport-SAML pour l'authentification dans ma demande.

Jusqu'à présent, j'ai pu configurer et utiliser la stratégie SAML, et ma demande est en mesure d'appeler le point d'entrée idp, et recevoir la réponse de retour de déplacés internes.

Je n'arrive pas à comprendre comment accéder aux informations utilisateur renvoyées par idp, afin que je puisse utiliser les informations utilisateur SAML retournées pour créer et gérer des sessions.

const saml = require('passport-saml'); 

module.exports = function (passport, config) { 

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

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

    var samlStrategyOptions = new saml.Strategy(
    { 
     // URL that goes from the Identity Provider -> Service Provider 
     callbackUrl: config.passport.saml.callback_url, 
     // path: config.passport.saml.path, 
     // URL that goes from the Service Provider -> Identity Provider 
     entryPoint: config.passport.saml.entryPoint, 
     issuer: config.passport.saml.issuer, 
     identifierFormat: null, 
     // Service Provider private key 
     decryptionPvk: config.passport.saml.decryptionPvk, 
     // Service Provider Certificate 
     privateCert: config.passport.saml.privateCert, 
     // Identity Provider's public key 
     cert: config.passport.saml.cert, 
     validateInResponseTo: false, 
     disableRequestedAuthnContext: true 
    }, 
    function (profile, done) { 
     return done(null, 
     { 
      id: profile.uid, 
      email: profile.email, 
      displayName: profile.cn, 
      firstName: profile.givenName, 
      lastName: profile.sn 
     }); 
    }) 


    // module.exports.samlStrategyOptions = samlStrategyOptions ; 
    passport.use(samlStrategyOptions); 

}; 

Voici mes contrôleurs de route pour express

router.route('/login') 

.get(
    passport.authenticate(config.passport.strategy, 
     { 
     successRedirect: '/', 
     failureRedirect: '/login' 
     }) 
); 

router.route('/login/callback/') 

.post(
    passport.authenticate(config.passport.strategy, 
     { 
     failureRedirect: '/', 
     failureFlash: true 
     }), 
    function (req, res) { 

     res.redirect('/'); 
    } 
); 

Et ceci est un extrait de SAML des propriétés que je reçois en réponse de Idp.

<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">Shubham123</saml:NameID> 

Répondre

0

Je recevais la même chose. J'ai donc utilisé corps-analyseur comme middleware

// middleware to parse HTTP POST's JSON, buffer, string,zipped or raw and URL encoded data and exposes it on req.body 
app.use(bodyParser.json()); 
// use querystring library to parse x-www-form-urlencoded data for flat data structure (not nested data) 
app.use(bodyParser.urlencoded({ extended: false })); 

et vous obtiendrez le profil comme

{ issuer: '', 
    sessionIndex: '_x0P5ZeWx-ACSQAulKgVTxSquNsVdac_H', 
    nameID: 'auth0|5a266569083226773d5d43a9', 
    nameIDFormat: 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified', 
    nameQualifier: undefined, 
    spNameQualifier: undefined, 
    'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier': 'auth0|s9ds', 
    'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress': '[email protected]', 
    'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name': '[email protected]', 
    'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn': '[email protected]', 
    'http://schemas.auth0.com/identities/default/provider': 'auth0', 
    'http://schemas.auth0.com/identities/default/connection': 'Username-Password-Authentication', 
    'http://schemas.auth0.com/identities/default/isSocial': 'false', 
    'http://schemas.auth0.com/email_verified': 'false', 
    'http://schemas.auth0.com/clientID': 'bZVOM5KQmhyir5xEYhLHGRAQglks2AIp', 
    'http://schemas.auth0.com/picture': 'https://s.gravatar.com/avatar/e85e57405a82225ff36b5af793ed287c?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fsu.png', 
    'http://schemas.auth0.com/nickname': 'myuser', 
    'http://schemas.auth0.com/identities': '[object Object]', 
    'http://schemas.auth0.com/updated_at': 'Mon Dec 18 2017 12:14:28 GMT+0000 (UTC)', 
    'http://schemas.auth0.com/created_at': 'Tue Dec 05 2017 09:22:49 GMT+0000 (UTC)', 
    getAssertionXml: [Function] } 

et créer l'utilisateur par extraction de données comme

{ id: profile["nameID"], userName: profile["http://schemas.auth0.com/nickname"] }