{"id":13649996,"url":"https://github.com/italia/spid-cie-php","last_synced_at":"2026-04-08T01:31:51.421Z","repository":{"id":43791297,"uuid":"122502619","full_name":"italia/spid-cie-php","owner":"italia","description":"Software Development Kit for easy SPID/CIE access integration with simplesamlphp - developed and mantained by Michele D'Amico @damikael","archived":false,"fork":false,"pushed_at":"2025-11-17T16:39:29.000Z","size":47547,"stargazers_count":90,"open_issues_count":9,"forks_count":44,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-11-17T18:22:24.193Z","etag":null,"topics":["cie","php","saml","simplesamlphp","spid"],"latest_commit_sha":null,"homepage":"https://www.damikael.dev","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/italia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"damikael","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2018-02-22T16:14:26.000Z","updated_at":"2025-11-17T16:38:12.000Z","dependencies_parsed_at":"2023-10-15T09:59:53.639Z","dependency_job_id":"605ee7dd-5615-478c-84dd-abb80f350bdb","html_url":"https://github.com/italia/spid-cie-php","commit_stats":null,"previous_names":["italia/spid-php"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/italia/spid-cie-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/italia%2Fspid-cie-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/italia%2Fspid-cie-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/italia%2Fspid-cie-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/italia%2Fspid-cie-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/italia","download_url":"https://codeload.github.com/italia/spid-cie-php/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/italia%2Fspid-cie-php/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31536450,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cie","php","saml","simplesamlphp","spid"],"created_at":"2024-08-02T02:00:32.326Z","updated_at":"2026-04-08T01:31:51.412Z","avatar_url":"https://github.com/italia.png","language":"PHP","funding_links":["https://github.com/sponsors/damikael"],"categories":["🎭 SPID"],"sub_categories":[],"readme":"\u003cimg src=\"https://github.com/italia/spid-graphics/blob/master/spid-logos/spid-logo-b-lb.png\" alt=\"SPID\" data-canonical-src=\"https://github.com/italia/spid-graphics/blob/master/spid-logos/spid-logo-b-lb.png\" width=\"50%\" /\u003e\n\n[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.0.28-8892BF.svg)](https://php.net/)\n[![Join the #spid-php channel](https://img.shields.io/badge/Slack%20channel-%23spid--php-blue.svg?logo=slack)](https://developersitalia.slack.com/messages/CB6DCK274)\n[![Get invited](https://slack.developers.italia.it/badge.svg)](https://slack.developers.italia.it/)\n[![SPID on forum.italia.it](https://img.shields.io/badge/Forum-SPID-blue.svg)](https://forum.italia.it/c/spid)\n![SP SPID in produzione con spid-php](https://img.shields.io/badge/SP%20SPID%20in%20produzione%20con%20spid--php-500+-green)\n\n# spid-cie-php\nSoftware Development Kit for easy SPID \u0026 CIE access integration with SimpleSAMLphp.\\\nspid-php has been developed and is maintained by Michele D'Amico (@damikael). **It's highly recommended to use the latest release**.\n\n\u003cimg src=\"doc/spid-php-tutorial.gif\" alt=\"spid-php video tutorial\" /\u003e\n\nspid-php è uno script composer (https://getcomposer.org/) che semplifica e automatizza il processo di installazione e configurazione di SimpleSAMLphp (https://simplesamlphp.org/) per l'integrazione dell'autenticazione SPID e CIE all'interno di applicazioni PHP. spid-php permette di realizzare un Service Provider (pubblico o privato) per SPID e/o CIE in pochi secondi, ma **non è orientato alla realizzazione di Aggregatori e/o Gestori**.  \n\n**Si raccomanda di mantenere sempre aggiornata la propria installazione all'ultima versione**.\n\nDurante il processo di setup lo script richiede l'inserimento delle seguenti informazioni:\n* directory di installazione (directory corrente)\n* directory root del webserver\n* nome del link al quale collegare SimpleSAMLphp\n* se eseguire l'installazione per SPID e/o CIE\n* EntityID del service provider\n* Tipologia del service provider (pubblico o privato)\n* Informazioni del service provider da inserire nel metadata\n* Informazioni del service provider da inserire nel certificato di firma in accordo con quanto previsto dall'[Avviso SPID n°29 v3](https://www.agid.gov.it/sites/default/files/repository_files/spid-avviso-n29v3-specifiche_sp_pubblici_e_privati.pdf) \n* AttributeConsumingServiceIndex da richiedere all'IDP\n* Attributi richiesti da inserire nel metadata\n* se inserire nella configurazione i dati dell'IDP SPID Demo (https://demo.spid.gov.it)\n* se inserire nella configurazione i dati dell'IDP SPID Demo in modalità Validator (https://demo.spid.gov.it/validator)\n* se inserire nella configurazione i dati dell'IDP per la validazione di AgID (https://validator.spid.gov.it)\n* se copiare nella root del webserver i file di esempio per l'integrazione del bottone\n* se copiare nella root del webserver i file di esempio per l'utilizzo come proxy\n* le informazioni necessarie per configurare un client di esempio per il proxy\n* i dati per la generazione del certificato X.509 per il service provider\n\ne si occupa di eseguire i seguenti passi:\n* scarica l'ultima versione di SimpleSAMLphp con le relative dipendenze\n* scarica l'ultima versione dello grafica per il bottone SPID (https://github.com/italia/spid-sp-access-button)\n* scarica l'ultima versione della grafica per il bottone CIE (https://github.com/italia/cie-graphics)\n* crea un certificato X.509 per il service provider SPID\n* crea un certificato X.509 per il service provider CIE\n* scarica i metadata degli IDP SPID di produzione tramite il metadata unico di configurazione (https://registry.spid.gov.it/metadata/idp/spid-entities-idps.xml)\n* configura il metadata degli IDP CIE di test e di produzione\n* effettua tutte le necessarie configurazioni su SimpleSAMLphp\n* predispone il template e le risorse grafiche dello SPID SP Access Button per essere utilizzate con SimpleSAMLphp\n* predispone il template e le risorse grafiche CIE essere utilizzate con SimpleSAMLphp\n\nAl termine del processo di setup si potranno scaricare i [metadata](#Metadata) oppure utilizzare i certificato X.509 creati nella directory /cert per registrare il service provider sull'ambiente di test/validazione.\n\nSe si è scelto di copiare i file di esempio, sarà possibile verificare subito l'integrazione accedendo da web a /login.php.\n\nSe si è scelto di copiare i file di esempio come proxy, sarà possibile verificare il funzionamento come proxy accedendo da web a /proxy-sample.php oppure /proxy-login.php\n\n## Requisiti\n* Web server\n* php \u003e= 8.0.28\n* php-xml\n* php-mbstring\n* php-gmp\n* Composer (https://getcomposer.org)\n* OpenSSL \u003e= 1.1.1\n* OpenSSL aes-256-cbc Cipher Algorithm\n\n## Installazione\nClonare, oppure salvare i file di spid-php, in una __directory non esposta sul web__ (__NON salvare i file del progetto nella root o in una sottodirectory del server web come www o public_html__). Quindi lanciare il comando di installazione dalla directory principale di spid-php.\n\n```\n# composer install\n```\nAl termine dell'installazione tutte le configurazioni sono salvate nei file *spid-php-setup.json*, *spid-php-openssl.cnf* e *spid-php-proxy.json*. In caso di reinstallazione, le informazioni di configurazione saranno recuperate automaticamente da tali file, senza la necessità di doverle reinserire nuovamente.  \n\n## Disinstallazione\n```\n# composer run-script uninstall\n```\nLa disinstallazione non cancella gli eventuali file *spid-php-setup.json*, *spid-php-openssl.cnf* e *spid-php-proxy.json* locali che contengono le configurazioni inserite durante il processo in installazione.\n\n## Aggiornamento Metadata IdP\n```\n# composer update-metadata\n```\n\n## Aggiornamento Certificati\n```\n# composer make-certificate \u003cdays\u003e\n```\nIl parametro *\u0026lt;days\u0026gt;* indica il numero di giorni di validità del certificato; se omesso, il valore predefinito è 730 giorni.\n\n## Firma metadata\n```\n# composer sign-metadata \u003cmetadata.xml\u003e \u003cmetadata-signed.xml\u003e\n```\nIl parametro *\u0026lt;metadata.xml\u0026gt;* indica il nome del file xml del metadata da firmare; se omesso, il valore predefinito è metadata.xml.\u003cbr/\u003e\nIl parametro *\u0026lt;metadata-signed.xml\u0026gt;* indica il nome del file xml del metadata firmato; se omesso, il valore predefinito è metadata-signed.xml.\n\n## Reinstallazione / Aggiornamento\n```\n# composer uninstall\n# composer install\n```\nSe nella directory locale sono presenti i file *spid-php-setup.json* e *spid-php-openssl.cnf*, l'aggiornamento non richiederà nuovamente le informazioni di configurazione. Per modificare le informazioni di configurazione precedentemente inserite, occorrerà eseguire la disinstallazione, cancellare o modificare manualmente il file *spid-php-setup.json*, quindi procedere alla nuova installazione. Per rigenerare i certificati occorrerà eseguire la disinstallazione, rinominare o cancellare la directory /cert o i certificati *spid-sp.crt* e *spid-sp.pem* in essa presenti, quindi procedere ad una nuova installazione.\n\n## Configurazione nginx\nPer utilizzare SimpleSAMLphp su webserver nginx occorre configurare nginx come nell'esempio seguente.\nIn *myservice* inserire il nome del servizio come specificato durante l'installazione.\n\n### Prerequisiti per certificati self-signed\nPer fare valido l'uso del `snippets/snakeoil.conf` file su Nginx, è necessario generare il certificato \"self-signed\" `/etc/ssl/certs/ssl-cert-snakeoil.pem`  attraverso la installazione del package `ssl-cert` su distribuizioni Debian based (come Ubuntu), con il comando:\n\n```bash\nsudo apt-get install ssl-cert\n```\n\nO, in alternativa, generare il certificato manualmente tramite OpenSSL, con il comando:\n\n```bash\nsudo make-ssl-cert generate-default-snakeoil --force-overwrite\n```\n\n### Configurazione\n```\nserver {  \n  listen 443 ssl http2;  \n  server_name sp.example.com;\n  root /var/www;\n  include snippets/snakeoil.conf;  \n  \n  location / {\n    try_files $uri $uri/ =404;\n    index index.php;\n    location ~ \\.php$ {\n      include snippets/fastcgi-php.conf;  \n      fastcgi_pass unix:/run/php/php8.1-fpm.sock;\n    }\n  }\n  \n  location /myservice/ {\n    alias /var/www/spid-cie-php/vendor/simplesamlphp/simplesamlphp/www/;\n    index index.php;\n    location ~ ^(?\u003cprefix\u003e/myservice)(?\u003cphpfile\u003e.+?\\.php)(?\u003cpathinfo\u003e/.*)?$ {\n      fastcgi_param SCRIPT_FILENAME $document_root$phpfile;\n      fastcgi_param PATH_INFO $pathinfo if_not_empty;\n      fastcgi_pass unix:/run/php/php8.1-fpm.sock;\n      include fastcgi_params;\n    }\n  }\n}\n```\n\n## Metadata\nDopo aver completato la procedura di installazione è possibile scaricare i metadati alle seguenti url:\n\n### Metadata SPID\n**/*myservice*/module.php/saml/sp/metadata.php/spid**\n\ndove *myservice* è il nome del servizio come specificato durante l'installazione.\n\n### Metadata CIE\n**/*myservice*/module.php/saml/sp/metadata.php/cie**\n\ndove *myservice* è il nome del servizio come specificato durante l'installazione.\n\n## API SDK\n### Costruttore\n```\nnew SPID_PHP()\n```\n\n### isSPIDEnabled\n```\nbool isSPIDEnabled()\n```\nrestituisce true se è stata eseguita le configurazione per SPID, false altrimenti\n\n### isCIEEnabled\n```\nbool isCIEEnabled()\n```\nrestituisce true se è stata eseguita le configurazione per CIE, false altrimenti\n\n### isAuthenticated\n```\nbool isAuthenticated()\n```\nrestituisce true se l'utente è autenticato, false altrimenti\n\n### isIdPAvailable\n```\nbool isIdPAvailable($idp)\n```\nrestituisce true se il valore di **$idp** è tra quelli previsti (vedi login) \n\n### isIdP\n```\nbool isIdP($idp)\n```\nrestituisce true se l'utente è autenticato con l'idp **$idp** (vedi login)\n\n### requireAuth\n```\nvoid requireAuth()\n```\nrichiede che l'utente sia autenticato. Se l'utente non è autenticato mostra il pannello di scelta dell'IDP\n\n### insertSPIDButtonCSS\n```\nvoid insertSPIDButtonCSS()\n```\ninserisce i riferimenti css necessari per la presentazione del bottone \n\n### insertSPIDButtonJS\n```\nvoid insertSPIDButtonJS()\n```\ninserisce i riferimenti al codice javascript necessario al funzionamento del bottone\n\n### insertSPIDButton\n```\nvoid insertSPIDButton($size, [$method='GET'])\n```\nstampa il codice per l'inserimento del pulsante 'Entra con SPID'. \n\n**$size** specifica la dimensione del pulsante (S|M|L|XL)\n\n**$method** specifica la versione del pulsante (GET|POST)\n\n### insertCIEButton\n```\nvoid insertCIEButton([$size='default'])\n```\nstampa il codice per l'inserimento del pulsante 'Entra con CIE'. \n\n**$size** specifica la dimensione del pulsante (default)\n\n### setPurpose (solo per SPID)\n```\nvoid setPurpose($purpose)\n```\nimposta l'estensione \"Purpose\" nell'AuthenticationRequest per inviare una richiesta di autenticazione per identità digitale ad uso professionale ([Avviso SPID n.18 v.2](https://www.agid.gov.it/sites/default/files/repository_files/spid-avviso-n18_v.2-_autenticazione_persona_giuridica_o_uso_professionale_per_la_persona_giuridica.pdf)).\n**$purpose** specifica il valore dell'estensione Purpose (P|LP|PG|PF|PX)\n\n### login\n```\nvoid login($idp, $level, [$returnTo], [$attributeConsumingServiceIndex], [$post])\n```\ninvia una richiesta di login livello $level verso l'idp **$idp**. Dopo l'autenticazione, l'utente è reindirizzato alla url eventualmente specificata in **$returnTo**. Se il parametro **$returnTo** non è specificato, l'utente è reindirizzato alla pagina di provenienza.\n\n**$idp** può assumere uno dei seguenti valori:\n* VALIDATOR\n* DEMO\n* DEMOVALIDATOR\n* ArubaPEC S.p.A.\n* EtnaHitech S.C.p.A.\n* InfoCert S.p.A.\n* IN.TE.S.A. S.p.A.\n* Lepida S.p.A.\n* Namirial\n* Poste Italiane SpA\n* Register.it S.p.A.\n* Sielte S.p.A.\n* TeamSystem s.p.a.\n* TI Trust Technologies srl\n* CIE TEST\n* CIE\n\n**$level** può assumere uno dei seguenti valori\n* 1\n* 2\n* 3\n\n**$post** può assumere valore \n* false\n* true. \n\nSe **$post** è true specifica che la AuthnRequest deve essere inviata in Binding HTTP-Post invece che HTTP-Request (default) \n\n### getResponseID\n```\nstring getResponseID()\n```\nrestituisce l'attributo ID della SAML Response ricevuta dall'IdP\n\n### getAttributes\n```\narray getAttributes()\n```\nrestituisce gli attributi dell'utente autenticato\n\n### getAttribute\n```\nstring getAttribute(string $attribute)\n```\nrestituisce il valore per lo specifico attributo \n\n### logout\n```\nvoid logout([$returnTo])\n```\nesegue la disconnessione. Dopo la disconnessione, l'utente è reindirizzato alla url specificata in **$returnTo** oppure alla pagina di provenienza se **$returnTo** non è specificato.\n\n### getLogoutURL\n```\nstring getLogoutURL([$returnTo])\n```\nrestituisce la url per eseguire la disconnessione. Dopo la disconnessione, l'utente è reindirizzato alla url specificata in **$returnTo** oppure alla pagina di provenienza se **$returnTo** non è specificato.\n\n\n## Esempio di integrazione\n```\nrequire_once(\"\u003cpath to spid-php\u003e/spid-php.php\");\n\n$spidsdk = new SPID_PHP();\n\nif(!$spidsdk-\u003eisAuthenticated()) {\n    if(!isset($_GET['idp'])) {\n        $spidsdk-\u003einsertSPIDButtonCSS();\n        $spidsdk-\u003einsertSPIDButton(\"L\");       \n        $spidsdk-\u003einsertSPIDButtonJS();         \n    } else {\n        $spidsdk-\u003elogin($_GET['idp'], 1);                \n    }\n} else {\n    foreach($spidsdk-\u003egetAttributes() as $attribute=\u003e$value) {\n        echo \"\u003cp\u003e\" . $attribute . \": \u003cb\u003e\" . $value[0] . \"\u003c/b\u003e\u003c/p\u003e\";\n    }\n    \n    echo \"\u003chr/\u003e\u003cp\u003e\u003ca href='\" . $spidsdk-\u003egetLogoutURL() . \"'\u003eLogout\u003c/a\u003e\u003c/p\u003e\";\n}\n\n\n```\n\n## Utilizzo come Proxy\nDurante l'installazione è possibile scegliere se installare i file di esempio per l'utilizzo di spid-php come proxy. \n\nIn tal caso viene richiesto:\n- URL di redirect alla quale inviare i dati dell'utente al termine dell'autenticazione\n- se firmare la response\n- se cifrare la response\n\nSe si seleziona Y alla domanda se firmare la response, i dati dell'utente saranno inviati alla URL di redirect in POST contenuti in un token in formato JWS firmato con la chiave privata del certificato del Service Provider generato durante l'installazione e salvato in */cert*.\n\nSe non si seleziona Y alla domanda se firmare la response, i dati dell'utente saranno inviati, invece, alla URL di redirect in POST come variabili in chiaro.\n\nSe oltre alla firma, si seleziona Y anche alla domanda se cifrare la response, questa sarà inviata alla URL di redirect in POST come token in formato JWS il cui payload contiene nell'attributo *data* un token JWE cifrato con un *client_secret* contenente i dati dell'utente.\n\n*client_id* e *client_secret* sono generati automaticamente per il client durante il setup, mostrati a video e salvati nel file *spid-php-proxy.json*.\n\n\nPer inserire ulteriori client con le relative configurazioni di *client_id*, *client_secret* e *redirect_uri*, è possibile editare il file *spid-php-proxy*.json \n\n## API Proxy\n### login\n```\nGET /proxy.php?action=login\u0026client_id=\u003cclient_id\u003e\u0026redirect_uri=\u003credirect_uri\u003e\u0026idp=\u003cidp\u003e\u0026state=\u003cstate\u003e\n```\nInvia la AuthnRequest ad uno specifico IdP e ritorna la Response decodificata o come JWS o JWS(JWE) in POST alla redirect_uri del client.\n\nParametri:\n\n - *client_id* è l'identificativo corrispondente al client\n - *redirect_uri* è la URL del client alla quale ritornare la risposta. Deve corrispondere ad una delle URL registrate per il client\n - *idp* è il valore che identifica l'IdP con il quale eseguire l'autenticazione (vedi API SDK login)\n - *state* è il valore del RelayState\n\n### logout\n```\nGET /proxy.php?action=logout\u0026client_id=\u003cclient_id\u003e\n```\nEsegue la disconnessione dall'IdP.\n  \nParametri:\n  \n - *client_id* è l'identificativo corrispondente al client. Dopo aver eseguito la disconnessione presso l'IdP, il flusso viene rediretto al primo redirect_uri registrato per il client\n\n### verify\n```\nGET /proxy.php?action=verify\u0026token=\u003ctoken\u003e\u0026decrypt=\u003cdecrypt\u003e\u0026secret=\u003csecret\u003e\n```\nVerifica e decifra il token JWT ricevuto con la response.\n  \nParametri:\n  \n - *token* è il token JWT ricevuto con la response, nel caso in cui si sia scelto di firmare la response\n - *decrypt* può assumere valore Y o N. Permette di decifrare la response nel caso in cui si sia scelto di cifrare la response\n - *secret* è il client_secret consegnato al client con cui è possibile decifrare la response\n  \nNel caso in cui non è possibile verificare la firma oppure non è possibile decifrare la response (perchè il secret non è corretto oppure perchè il token è malformato) viene restituito status code 422.\n  \nSi consiglia di utilizzare l'endpoint verify esclusivamente per la verifica della firma dei messaggi. Per decifrare i dati dell'utente, invece, si consiglia di implementare la decodifica sul client.\n\n## Esempio di utilizzo del proxy\n```\n\u003ca href=\"/proxy-login.php\"\u003eGo to Login Page or...\u003c/a\u003e\u003cbr/\u003e\n\u003ca href=\"/proxy.php?client_id=\u003cclient_id\u003e\u0026action=login\u0026redirect_uri=/proxy-sample.php\u0026idp=DEMOVALIDATOR\u0026state=state\"\u003eLogin with a single IdP (example for DEMO Validator)\u003c/a\u003e\n\u003cp\u003e\n    \u003c?php\n        foreach($_POST as $attribute=\u003e$value) {\n            echo \"\u003cp\u003e\" . $attribute . \": \u003cb\u003e\" . $value . \"\u003c/b\u003e\u003c/p\u003e\";\n        }\n    ?\u003e\n\u003c/p\u003e\n\u003ca href=\"/proxy-spid.php?client_id=61504487f292e\u0026action=logout\"\u003eEsci\u003c/a\u003e\n\n```\n## Gestione degli errori SPID\n\nDurante il processo di autenticazione SPID posso verificarsi degli errori che \nvengono generati dagli IDP, determinati dall'interazione dell'utente con la form di login oppure da formati delle richieste che non rispettano le regole tecniche di SPID.\n\nLa tabella con i messaggi di errore è disponible [qui](https://docs.italia.it/italia/spid/spid-regole-tecniche/it/stabile/messaggi-errore.html)\n\nLo script ```/error.php``` viene richiamato alla ricezione di un messaggio \ndi Response che contiene i dettagli dell'errore.\n\n\n## Author\n[Michele D'Amico (damikael)](https://it.linkedin.com/in/damikael)\n \n## Credits\n\u003ca href=\"https://www.linfaservice.it\" target=\"_blank\"\u003e\u003cimg  style=\"border:1px solid #ccc; padding:5px; margin-right:20px; vertical-align:middle; width: 200px;\" src=\"https://www.linfaservice.it/common/linfaservice.png\" alt=\"Linfa Service\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.manydesigns.com\" target=\"_blank\"\u003e\u003cimg  style=\"border:1px solid #ccc; padding:5px; margin-right:20px; vertical-align:middle; width: 200px;\" src=\"https://manydesigns.com/wp-content/uploads/2025/08/logo-md.png\" alt=\"ManyDesigns\"\u003e\u003c/a\u003e\n  \n## Contributors\n\u003ca href = \"https://github.com/italia/spid-php/contributors\"\u003e\n  \u003cimg src = \"https://contrib.rocks/image?repo=italia/spid-php\"/\u003e\n\u003c/a\u003e\n\n## SPID Compliance\n\n|\u003cimg src=\"https://github.com/italia/spid-graphics/blob/master/spid-logos/spid-logo-c-lb.png?raw=true\" width=\"100\" /\u003e\u003cbr /\u003e_Compliance with [SPID regulations](http://www.agid.gov.it/sites/default/files/circolari/spid-regole_tecniche_v1.pdf) (for Service Providers)_|status|notes|\n|:---|:---|:---|\n|**SPID Avviso n.18 v.2:**|✓||\n|**SPID Avviso n.29 v.3:**|✓||\n|generation of certificates|✓||\n|generation of metadata|✓||\n|**Metadata:**|||\n|parsing of IdP XML metadata (1.2.2.4)|✓||\n|parsing of AA XML metadata (2.2.4)|||\n|SP XML metadata generation (1.3.2)|✓||\n|**AuthnRequest generation (1.2.2.1):**|||\n|generation of AuthnRequest XML|✓||\n|HTTP-Redirect binding|✓||\n|HTTP-POST binding|✓||\n|`AssertionConsumerServiceURL` customization|||\n|`AssertionConsumerServiceIndex` customization|||\n|`AttributeConsumingServiceIndex` customization|✓||\n|`AuthnContextClassRef` (SPID level) customization|✓||\n|`RequestedAuthnContext/@Comparison` customization|✓||\n|`RelayState` customization (1.2.2)|✓||\n|**Response/Assertion parsing**|||\n|verification of `Response/Signature` value (if any)|✓||\n|verification of `Response/Signature` certificate (if any) against IdP/AA metadata|✓||\n|verification of `Assertion/Signature` value|✓||\n|verification of `Assertion/Signature` certificate against IdP/AA metadata|✓||\n|verification of `SubjectConfirmationData/@Recipient`|✓||\n|verification of `SubjectConfirmationData/@NotOnOrAfter`|✓||\n|verification of `SubjectConfirmationData/@InResponseTo`|✓||\n|verification of `Issuer`|✓||\n|verification of `Destination`|✓||\n|verification of `Conditions/@NotBefore`|✓||\n|verification of `Conditions/@NotOnOrAfter`|✓||\n|verification of `Audience`|✓||\n|parsing of Response with no `Assertion` (authentication/query failure)|✓||\n|parsing of failure `StatusCode` (Requester/Responder)|✓||\n|verification of `RelayState` (saml-bindings-2.0-os 3.5.3)|✓||\n|**Response/Assertion parsing for SSO (1.2.1, 1.2.2.2, 1.3.1):**|||\n|parsing of `NameID`|✓||\n|parsing of `AuthnContextClassRef` (SPID level)|✓||\n|parsing of attributes|✓||\n|**Response/Assertion parsing for attribute query (2.2.2.2, 2.3.1):**|||\n|parsing of attributes|✓||\n|**LogoutRequest generation (for SP-initiated logout):**|||\n|generation of LogoutRequest XML|✓||\n|HTTP-Redirect binding|✓||\n|HTTP-POST binding|✓||\n|**LogoutResponse parsing (for SP-initiated logout):**|||\n|parsing of LogoutResponse XML|✓||\n|verification of `LogoutResponse/Signature` value (if any)|✓||\n|verification of `LogoutResponse/Signature` certificate (if any) against IdP metadata|✓||\n|verification of `Issuer`|✓||\n|verification of `Destination`|✓||\n|PartialLogout detection|||\n|**LogoutRequest parsing (for third-party-initiated logout):**||\n|parsing of LogoutRequest XML|✓||\n|verification of `LogoutRequest/Signature` value (if any)|✓||\n|verification of `LogoutRequest/Signature` certificate (if any) against IdP metadata|✓||\n|verification of `Issuer`|✓||\n|verification of `Destination`|✓||\n|parsing of `NameID`|✓||\n|**LogoutResponse generation (for third-party-initiated logout):**||\n|generation of LogoutResponse XML|✓||\n|HTTP-Redirect binding|✓||\n|HTTP-POST binding|✓||\n|PartialLogout customization|✓||\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitalia%2Fspid-cie-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitalia%2Fspid-cie-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitalia%2Fspid-cie-php/lists"}