italia / spid-saml-check

Tool di verifica implementazione SPID SAML
European Union Public License 1.2
71 stars 59 forks source link

Errori in installazione ultima versione ed errore in check saml request che guarda internamente nel path sbagliato #213

Open mperudirectio opened 2 years ago

mperudirectio commented 2 years ago

Buongiorno, stiamo riscontrando dei problemi in uso con l'installazione e anche l'esecuzione di questo progetto.

Stiamo provando la validazione di spid-saml-check, per il momento in locale, per effettuare i test sul metadata, le request e le response. La chiamata tramite la nostra app al validator funziona correttamente, atterriamo nell'app e ci logghiamo come validator / validator correttamente. Anche il download del metadata e sia check strict che check extra del metadata non danno nessun warn/errore. Questo il metadata downloadato:

<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:spid="https://spid.gov.it/saml-extensions" ID="a088bc6e-33c5-4ff2-b35b-d9c3ff9a2c9e" entityID="https://localhost:44388/">
    <ds:Signature Id="ODCECSign">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            <ds:Reference URI="#a088bc6e-33c5-4ff2-b35b-d9c3ff9a2c9e">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                </ds:Transforms>                
                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                <ds:DigestValue>
                    [DigestValue]
                </ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>
            [SignatureValue]
        </ds:SignatureValue>
        <ds:KeyInfo>
            <ds:X509Data>
                <ds:X509Certificate>                    
                    [X509Certificate]
                </ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
    </ds:Signature>
    <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
        <md:KeyDescriptor use="signing">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:X509Data>
                    <ds:X509Certificate>
                        [X509Certificate]
                    </ds:X509Certificate>
                </ds:X509Data>
            </ds:KeyInfo>
        </md:KeyDescriptor>
        <md:KeyDescriptor use="encryption">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:X509Data>
                    <ds:X509Certificate>
                        [X509Certificate]
                    </ds:X509Certificate>
                </ds:X509Data>
            </ds:KeyInfo>
        </md:KeyDescriptor>
        <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost:44388/spid/logout"/>
        <md:NameIDFormat>
            urn:oasis:names:tc:SAML:2.0:nameid-format:transient
        </md:NameIDFormat>
        <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost:44388/spid/acs" index="0" isDefault="true"/>
        <md:AttributeConsumingService index="1">
            <md:ServiceName xml:lang="it">
                Accesso ODCEC Torino tramite SPID
            </md:ServiceName>
            <md:RequestedAttribute Name="name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="fiscalNumber" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="familyName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="spidCode" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="gender" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="dateOfBirth" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="countyOfBirth" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="idCard" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="ivaCode" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="placeOfBirth" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
            <md:RequestedAttribute Name="companyName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
        </md:AttributeConsumingService>
    </md:SPSSODescriptor>
    <md:Organization>
        <md:OrganizationName xml:lang="it">
            ODCEC Torino
        </md:OrganizationName>
        <md:OrganizationDisplayName xml:lang="it">
            Ordine dei Dottori Commercialisti e degli Esperti Contabili di Torino
        </md:OrganizationDisplayName>
        <md:OrganizationURL xml:lang="it">
            https://localhost:44388/
        </md:OrganizationURL>
    </md:Organization>
    <md:ContactPerson contactType="other">
        <md:Extensions>
            <spid:IPACode>
                [ipa code]
            </spid:IPACode>
            <spid:Public/>
        </md:Extensions>
        <md:EmailAddress>
            [email]
        </md:EmailAddress>
    </md:ContactPerson>
</md:EntityDescriptor>

(Attualmente sia le url di assertion e logout, e anche l'entity id sono tutte in riferimento al progetto locale) Check strict ed extra del metadata vengono eseguiti senza dare errori (ovviamente il controllo non di produzione). Invece quando andiamo a testare la request, innanzitutto questo è lo saml della request che ci viene mostrato:

<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_cd8e9961-e171-44ea-a92a-4c272791d15e" Version="2.0" IssueInstant="2022-01-13T11:58:41.746104Z" Destination="https://localhost:8080/samlsso" ForceAuthn="true" AssertionConsumerServiceIndex="0" AttributeConsumingServiceIndex="0" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer NameQualifier="https://localhost:44388/" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">
        https://localhost:44388/
    </saml:Issuer>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            <Reference URI="#_cd8e9961-e171-44ea-a92a-4c272791d15e">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                    <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                <DigestValue>
                    [DigestValue]
                </DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>
            [SignatureValue]
        </SignatureValue>
        <KeyInfo>
            <X509Data>
                <X509Certificate>
                    [X509Certificate]
                </X509Certificate>
            </X509Data>
        </KeyInfo>
    </Signature>
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
    <saml:Conditions NotBefore="2022-01-13T11:48:41.746104Z" NotOnOrAfter="2022-01-13T12:08:41.746104Z"/>
    <samlp:RequestedAuthnContext Comparison="minimum">
        <saml:AuthnContextClassRef>
            https://www.spid.gov.it/SpidL2
        </saml:AuthnContextClassRef>
    </samlp:RequestedAuthnContext>
</samlp:AuthnRequest>

Se proviamo ad eseguire il check (sia strict che extra), l'applicazione va in eccezzione dando il seguente errore: image

Andando ad ispezionare il file system del container, abbiamo constatato che il problema sta nel fatto che il comando che viene lanciato torna indietro di una cartella per andare a cercare i file: file://../data/ Inizialmente pensavo che l'errore stesse nel ../ che non ci dovrebbe essere. Ma in realtà, andando ad analizzare il filesystem, dentro data effettivamente non è presente il file sp-authn-request-strict.json; image

A questo punto, non sapendo come possiamo manualmente fixare questo comando errato, chiediamo se qualcuno potrebbe indicarci una possibile soluzione.

Per quanto concerne invece la problematica di installazione, quando proviamo ad installare l'ultima versione viene riportato un errore di node, che non riesce a trovare il modulo "express": image

Per risolverlo, siamo scesi di una versione per installarlo: docker run -t -i -p 8080:8080 italia/spid-saml-check:v.1.8.1

In questo modo il container si è installato ed eseguito correttamente. Ma comunque l'ultima versione ci risulta impossibile da installare.

Grazie mille in anticipo.

vpxyz commented 2 years ago

Buongiorno, confermo quanto sopra. La cosa non si è risolta anche installando express e alcune dipendenze che gli errori, man mano, segnalavano:

RUN cd /spid-saml-check/spid-validator && \ cd client && npm install --silent && cd .. && \ cd server && npm install --silent && cd .. && \ npm install express \ npm install express-handlebars \ npm install helmet \ npm install express-session \ npm install fs-extra \ npm run build && \ npm cache clean --force

Dopo aver fatto ciò, l'errore era il seguente:

`

spid-validator@1.0.0 start-prod /spid-saml-check/spid-validator node server/spid-validator.js

/spid-saml-check/spid-validator/node_modules/universalify/index.js:15 }, 'name', { value: fn.name }) ^

TypeError: Cannot read property 'name' of undefined at exports.fromCallback (/spid-saml-check/spid-validator/node_modules/universalify/index.js:15:26) at Object. (/spid-saml-check/spid-validator/node_modules/fs-extra/lib/fs/index.js:57:27) at Module._compile (module.js:653:30) at Object.Module._extensions..js (module.js:664:10) at Module.load (module.js:566:32) at tryModuleLoad (module.js:506:12) at Function.Module._load (module.js:498:3) at Module.require (module.js:597:17) at require (internal/module.js:11:18) at Object. (/spid-saml-check/spid-validator/node_modules/fs-extra/lib/index.js:5:6) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! spid-validator@1.0.0 start-prod: node server/spid-validator.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the spid-validator@1.0.0 start-prod script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2022-01-17T10_23_49_231Z-debug.log ` Grazie