Spid in php puro

Non devi indicare l’AssertionConsumerServiceURL nel metadata. :roll_eyes:

Nel metadata devi indicare la url dove ti aspetti di ricevere la Response da parte dell’IdP (attibuto Location dell’AssertionConsumerService).

Nella AuthnRequest hai 2 strade (ALTERNATIVE FRA LORO!!!):

  1. Indichi nell’AssertionConsumerServiceIndex l’indice numerico (attributo index) dell’AssertionConsumerService, già specificato nel metadata.
  2. Ripeti nell’AssertionConsumerServiceURL la url dove ti aspetti di ricevere la Response da parte dell’IdP, che DEVE ESSERE UGUALE a quella indicata nella Location dell’AssertionConsumerService

Ti consiglio di rileggerti nelle regole tecnciche che ti ho indicato la struttura dell’AuthnRequest e del metadata Spevice PRovider. Sono 4 paginette ma chiariscono tutto.

Buongiorno caro Antonio Giovanni, immagino che sei attivo in questo forum perché ti piace aiutare gli altri a risolverei problemi e non per umiliarli, quindi non ci sono da alzare gli occhi al cielo da parte tua, ma da parte mia: risolvo gli integrali di linea, ho capito senza difficoltà le serie di Fourier e di Taylor, sviluppo software da 30 anni e riesco ad usare qualunque libreria senza problemi in vari linguaggi… se non capisco qualcosa di informatica è perché la documentazione è poco chiara o volutamente criptica, come in questo caso.
Quindi se ti va di aiutarmi devo capire alcune cose che sono per me poco chiare:

Ho utilizzato lo SPID validator per testare il mio metadata, che devo far registrare ad AGID.
Utilizzando tutti i check disponibili nessun errore di alcun genere viene rilevato nel metadata.
Allora ho fatto richiesta ad AGID di registrare il metadata dandone l’indirizzo.
Il metadata viene rifiutato da AGID per l’errore qui descritto:
Il tag presente nel metadata AssertionConsumerService Location è diverso dal tag presente nella request AssertionConsumerServiceURL

AssertionConsumerService Location: https://iss.comunecanegrate.it/post/
AssertionConsumerServiceURL: https://spid.comunecanegrate.it/ISS/module.php/saml/sp/saml2-acs.php/service
  1. da dove viene presa l’AssertionConsumerServiceURL. ?
  2. perchè per registrare il metadata serve specificare AssertionConsumerServiceURL se è già specificato l’indirizzo del servizio in AssertionConsumerService “Location”
  3. quale test usa agid per ottenere questo errore?

Si ringrazia per la collaborazione

Buongiorno @ced-canegrate ,
sono sicuro che l’intenzione di @AGS era esclusivamente volta a chiarire i dubbi e risolvere i problemi riscontrati.
Al di là delle incomprensioni, tuttavia, credo di aver capito la causa delle difficoltà incontrate: @ced-canegrate con spid-php non occorre provvedere a realizzare manualmente il metadata e firmarlo, perchè si occupa di tutto lo script spid-php, predisponendo il metadata con i corretti riferimenti, gli stessi che vengono inseriti nella AuthnRequest.
Per maggiore supporto, ti consiglio di unirti al canale slack spid-php così da poterne discutere meglio.

Michele D’Amico

1 Mi Piace

Buongiorno, grazie per il suggerimento. Lo script spid-php, che viene eseguito in fase di installazione, a me genera i certificati, ma non trovo nelle cartelle il file metadata.xml da inviare a agid per l’accreditamento…evidentemente sbaglio qualcosa, ma non capisco cosa possa essere. Lo script dovrebbe evidenziare degli errori se non è riuscito a creare il metadata.xml?

Buongiorno @ced-canegrate
come indicato sul README, il metadata viene generato da simpleSAMLphp alla url:
/myservice/module.php/saml/sp/metadata.php/service
dove myservice è il nome del servizio come specificato durante l’installazione.

Michele D’Amico

Buongiorno, dopo parecchio tempo finalmente, con un server linux autogestito abbiamo installato spid-php e subito, senza errori, ha generato il metadata!
Solo che adesso avrei bisogno di riprendere l’iter ufficiale (test e produzione) per poter proseguire. Gentilmente, visto che già in precedenza sei stato estremamente chiaro, mi potresti indicare dove trovo la documentazione o supporto?

Leggi le istruzioni sul sito Diventa fornitore di servizi - Spid e segui le indicazioni per procedura tecnica e proceduta amministrativa.

Buongiorno, dopo aver effettuato il test di accesso con la pagina login-spid.php e aver inserito le credenziali di test e aver visto che effettivamente vengono recuperati i parametri richiesti, si può chiedere di registrare il metadata in produzione, in che modo?

Prima devi finire di integrare l’autenticazione nella tua applicazione (anche in un ambiente di sviluppo , purché accedibile da AgID).
Quando il tuo applicativo sarà di fatto pronto alla pubblicazione, devi seguire le indicazioni per la procedura tecnica ( link in fondo alla pagina che ti ho citato ieri)

Ok grazie mille. L’applicativo era già attivo da anni, ma con autenticazione utente-password.

Buongiorno, ai fini della conservazione del LOG (24 mesi) della coppia <authnrequest> e <response> nella fase di accesso tramite SPID-PHP, come posso accedere a questi valori tramite PHP:

  • <AuthnRequest>;
  • <Response>;
  • AuthnReq_ID;
  • AuthnReq_ IssueInstant;
  • Resp_ID;
  • Resp_ IssueInstant;
  • Resp _ Issuer;
  • Assertion_ID;
  • Assertion_subject;
  • Assertion_subject_NameQualifier;

per poterli poi memorizzare nel LOG?
Cordiali Saluti
David Arduin

In /vendor/simplesamlphp/simplesamlphp/config/config.php puoi definire la directory dove è memorizzato il log ed il nome del file di log.
All’interno del file di log hai sia le AuthnRequest che le Response.

Ciao,
sto avendo molte difficoltà nell’installazione della libreria spid-php, posso chiedere che tipo di macchina linux è stata utilizzata?
Il mio ambiente è il seguente:

  • Linux CentOS 7.9
  • php 7.4.28
  • nginx 1.20

La procedura di installazione va a buon fine ma se provo a scaricare il metadata:
/myservice/module.php/saml/sp/metadata.php/service
ottengo un errore 404

Salve,
come anticipavo nel messaggio precedente, alla url del readme io ottengo un not found.
Avete dei consigli su cosa controllare?

Ho usato senza particolari problemi la libreria sia su Windows che su derivate Ubuntu, ma sempre con Webserver Apache.

Nella documentazione del progetto ci sono delle istruzioni specifiche per il Webserver ngnix.

Ricordo che se dai al servizio un nome diverso da “myservice”, ovviamente la url va modificata conseguentemente.

La configurazione nginx suggerita nella documentazione non mi funziona, sembra dovuto alla direttiva:

try_files $fastcgi_script_name =404;

e alla mancanza di:

fastcgi_param SCRIPT_FILENAME $request_filename;

dopo un po’ di ricerca ho adottato questa:

  location /myservice/ {
    location ~ \.php(/|$) {
          fastcgi_split_path_info ^(.+?\.php)(/.+)$;
          fastcgi_param SCRIPT_FILENAME $request_filename;
          fastcgi_param PATH_INFO $fastcgi_path_info;
          fastcgi_pass 127.0.0.1:9000;
          fastcgi_index index.php;
          include fastcgi_params;
    }
  }

Adesso, tentando di scaricare il metadata ottengo questo errore:
StatusMessage: authsources[‘service’]: Unable to load certificate/public key from file “/applicazioni/spid-php/vendor/simplesamlphp/simplesamlphp/cert/spid-sp.crt”.
ed effettivamente nella cartella indicata non è presente un crt, a seguito dell’installazione è stato generato unicamente un file spid-sp.pem .
La procedura avrebbe dovuto generare anche il file crt?

Rivedendo la procedura di installazione, vedo questi messaggi in output a video:

Configuring OpenSSL... OK
Generating a 3072 bit RSA private key
......................................++
.................................................................++
writing new private key to '/applicazioni/appo/spid-php/vendor/simplesamlphp/simplesamlphp/cert/spid-sp.pem'
-----
problems making Certificate Request
140355211597712:error:0D06407A:asn1 encoding routines:a2d_ASN1_OBJECT:first num too large:a_object.c:108:
140355211597712:error:0B083077:x509 certificate routines:X509_NAME_ENTRY_create_by_txt:invalid field name:x509name.c:295:name=organizationIdentifier

ci sono forse errori nella creazione del certificato?

UPDATE
Ho individuato il problema, CentOS aveva come openssl la versione 1.0 nonostante fosse installata anche la libreria 1.1.1, settata la versione giusta, anche la compilazione dei certificati è andata a buon fine e sono riuscito a scaricare il metadata.

Salve a tutti,
riguardo alla procedura autorizzativa per la messa in produzione, ho un dubbio.
Il sistema di accesso con SPID adesso è funzionante in ambiente di staging utilizzando lo SPID demo, per la procedura amministrativa è necessario implementare il sistema di accesso anche sulla produzione per chiedere l’autorizzazione? O può essere fatta su ambiente di staging accessibile?
Ovviamente il dominio sarà differente tra staging e produzione.

Buonasera @ilfasta ,
il collaudo AgID viene effettuato su ambiente di produzione. Nel caso in cui ciò non dovesse essere possibile è necessario spiegarne ad AgID le ragioni in fase di richiesta di collaudo e concordare le modalità opportune per il collaudo in ambiente di staging, assicurando che l’implementazione sarà la stessa in produzione.

Michele D’Amico (damikael)

Ciao a tutti faccio una domanda perchè ho alcuni punti non chiari e prima di provare a implementare li SPID sul nostro applicativo web in PHP (azienda privata) vorrei chiedere:

  • attualmente i ns clienti accedono con le normali credenziali nomeutente + password + google authenticator.

Se dovessi implementare un login tramite SPID, come faccio a riconoscere (“associare”) il login al mio account esistente sul sito?

MI spiego con un esempio: se ho un cliente che come nomeutente (sull’applicativo web) ha scelto “pippo2022” e password “12345” e decidesse di usare lo SPID per entrare con le sue credenziali “mario” e password “mario2022”…a questo punto da cosa dovrei dedurre che quell’accesso SPID equivale a pippo2022 ?

Il Sistema SPID ti permette di ricevere tale lista di informazioni (o un suo sottoinsieme) relativi al soggetto che tenta di accedere alla piattaforma.

Quindi non l’associ al login, ma ai dati anagrafici dell’utente (preferibilmente tramite codice fiscale).

Ricordo che nel caso di Service Provider privati, l’integrazione alla Federazione SPID non è gratuita, ma prevede il pagamento di corrispettivi economici, secondo quanto indicato in questo documento