random42 / passport-spid

Passport strategy for SPID (italian citizens) authentication
MIT License
12 stars 5 forks source link

tentativo di gestire più IdP #5

Closed bernardini687 closed 8 months ago

bernardini687 commented 8 months ago

ciao!

sto tentando di gestire due diversi IdP offerti da spid-saml-check (https://localhost:8443 e https://localhost:8443/demo). ho inserito entrambi i metadata degli IdP in un singolo registro xml e provando a chiamare strategy.getIDPS() li vedo parsati correttamente.

per scegliere l'IdP dalla chiamata di login ho implementato getIDPEntityIdFromRequest() in questo modo:

function getIDPEntityIdFromRequest(expressRequest) {
  const entityID = expressRequest.query?.entityID;

  if (entityID && IDP_ENTITY_IDS.includes(entityID)) {
    console.log(`Chosen IdP: "${entityID}"`);
    return entityID;
  }

  console.log(`Unkown IdP: "${entityID}"`);
  console.log(`Defaulting to: "${TEST_IDP}"`);
  return TEST_IDP;
}

il problema che sto incontrando è nella callback che avviene dopo il login con l'IdP https://localhost:8443/demo poiché mi sembra di capire che anche durante la callback viene chiamata la funzione sopra, questa volta senza parametro nella query e quindi, facendo default a un altro IdP, ottengo l'errore: Invalid Issuer "https://localhost:8443/demo". non riesco a trovare una soluzione su come, nella callback, poter risalire all'IdP verso cui è stata originata la richiesta 🤔

ringrazio in anticipo per qualsiasi delucidazione in merito, sono alle prime armi con l'integrazione di SPID e questa mi è sembrata la libreria più user-friendly tra le altre in JS, ottimo lavoro!

random42 commented 8 months ago

Ciao, dovrei averlo fixato, prova a scaricare l'ultima versione 2.0.1

bernardini687 commented 8 months ago

Ciao! Grazie mille. Ho provato, ottengo un errore diverso: Invalid NameQualifier "https://localhost:8443/demo".

Questi i log delle richieste e dell'errore, se possono essere d'aiuto:

{
  path: '/login',
  query: { entityID: 'https://localhost:8443/demo' }
}
Chosen IdP: "https://localhost:8443/demo"
{
  path: '/login/cb',
  query: {}
}
Unkown IdP: "undefined"
Defaulting to: "https://localhost:8443"
AssertionError [ERR_ASSERTION]: Invalid NameQualifier "https://localhost:8443/demo"
    at SpidResponse.validate (/Users/condense/work/enpam/spid-poc-express/node_modules/passport-spid/dist/src/response.js:104:26)
    at SpidSAML.<anonymous> (/Users/condense/work/enpam/spid-poc-express/node_modules/passport-spid/dist/src/saml.js:72:17)
    at Generator.next (<anonymous>)
    at fulfilled (/Users/condense/work/enpam/spid-poc-express/node_modules/passport-spid/dist/src/saml.js:5:58)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  generatedMessage: false,
  code: 'ERR_ASSERTION',
  actual: 'https://localhost:8443/demo',
  expected: 'https://localhost:8443',
  operator: 'strictEqual'
}
bernardini687 commented 8 months ago

Forse ho trovato il problema, sono riuscito a superare tutte le assertion così, ma lascio verificare a te: https://github.com/random42/passport-spid/pull/7

random42 commented 8 months ago

Grazie, pubblicato 2.0.2, fammi sapere.

bernardini687 commented 8 months ago

a posto, chiudo la issue. grazie ancora!