You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
L'elemento isPassive è presente. Stando alle regole tecniche spid l'elemento isPassive 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.
Sempre stando alle regole tecniche, nell’elemento <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.
L'attributoFormat dell'elemento <Issuer> deve essere uguale a urn:oasis:names:tc:SAML:2.0:nameid-format:entity. Viene posto invece a urn:oasis:names:tc:SAML:2.0:nameid-format:transient.
Questo SDK genera una richiesta per il livello di autorizzazione L2, ma non aggiunge l'attributo 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 stringa https://www.spid.gov.it/SpidL2)
Nell'elemento <RequestedAuthnContext>, l'attributo Comparison viene impostato di default ad exact. Sarebbe preferibile scegliere come valore di default minimum. 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).
Gli elementi <SignatureValue> e <DigestValue> sono vuoti. La richiesta non viene quindi firmata correttamente.
Se si segue la richiesta POST, si deve solamente codificare in base64.
Nel costruttore della classe AuthenticationInfoExtractor, viene hardcodato il valore https://spid.lecce.it. Per quale motivo?
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.
The text was updated successfully, but these errors were encountered:
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?
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 InvalidInput - Both X509Data and KeyValue found. Use verify(ignore_ambiguous_key_info=True) to ignore KeyValue and validate using X509Data only. spid-testenv2#325 e Both X509Data and KeyValue found spid-keycloak-provider#7Ecco le soluzioni:
Per i problemi 1 e 2:
Per il problema 3:
Per il problema 5:
Per il problema 6 vedere #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.
The text was updated successfully, but these errors were encountered: