Open vincenzocorso opened 3 years ago
Ciao @vincenzocorso , penso che potresti incominciare con una PR delle tue soluzioni provvisorie, poi i maintainer le valuteranno, non pensi?
Ciao @vincenzocorso ho unito alcune PR che risolvevano parte delle problematiche da te esposte, ti andrebbe di fare un test con l'attuale master branch e aggiornare questo thread?
Te ne sarei enormemente grato
Salve, sto cercando di far funzionare questo SDK per testare l'autenticazione tramite spid. Nel fare ciò ho riscontrato una serie di problematiche:
I problemi nella richiesta sono:
isPassive
è presente. Stando alle regole tecniche spid l'elementoisPassive
NON deve essere presente (ad indicare il valore false). Ad esempio lo spid test env mostra un errore (anche se il valore dell'elemento è posto a false). Sarebbe preferibile non inserirlo proprio.<AuthnRequest>
deve essere presente solo UNO dei seguenti attributi:AssertionConsumerServiceIndex
,AssertionConsumerServiceURL
,ProtocolBinding
. La richiesta generata da questo SDK li mette tutti. Lo spid test env mostra quindi un errore, segnalando la cosa.Format
dell'elemento<Issuer>
deve essere uguale aurn:oasis:names:tc:SAML:2.0:nameid-format:entity
. Viene posto invece aurn:oasis:names:tc:SAML:2.0:nameid-format:transient
.ForceAuthn
nell'elemento<AuthnRequest>
(richiesto per i livelli L2 e L3). Sarebbe anche preferibile lasciare scegliere a chi utilizza la libreria quale livello spid utilizzare (invece di hardcodare la stringahttps://www.spid.gov.it/SpidL2
)<RequestedAuthnContext>
, l'attributoComparison
viene impostato di default adexact
. Sarebbe preferibile scegliere come valore di defaultminimum
. Citando le regole tecniche: "L’Identity Provider ha facoltà di utilizzare per l’autenticazione un livello SPID più alto rispetto a quelli risultanti dall’indicazione del richiedente mediante l’attributo Comparison. Tale scelta non deve comportare un esito negativo della richiesta". Cioè bisogna permette l'accesso anche a chi ha uno spid di livello superiore (es L3).<SignatureValue>
e<DigestValue>
sono vuoti. La richiesta non viene quindi firmata correttamente.AuthenticationInfoExtractor
, viene hardcodato il valorehttps://spid.lecce.it
. Per quale motivo?<KeyInfo>
, vengono inseriti entrambi gli elementi<KeyValue>
e<X509Data>
. In teoria questo non dovrebbe essere un problema in sè. Chi utilizza il test env potrebbe incontrare un eccezione. Per maggiori informazioni vedere italia/spid-testenv2#325 e lscorcia/keycloak-spid-provider#7Ecco le soluzioni: Per i problemi 1 e 2:
Per il problema 3:
Per il problema 5:
Per il problema 6 vedere italia/spid-spring#10 Per il problema 7 ho sostituito l'intero metodo con questo:
Risolti questi problemi, si ha un eccezione NullPointerException quando si prova a decodificare la SAMLResponse.
Sfortunatamente non ho trovato soluzione a questo problema. Sembra sia dovuto al fatto che l'oggetto saml2Config non viene correttamente configurato (l'autore ha lasciato un TODO). Quindi al momento, con questo SDK, non si può decodificare la risposta ricevuta dall'idp.
Aprò un issue (e non una pull request) perché si tratta solamente di soluzioni "temporanee" che ho trovato. Pertanto dovrebbero essere controllate. Spero che in un giorno non troppo lontano questa repository venga sistemata.