Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Eccezione - Impossibile recuperare il profilo utente da Cohesion2 #3

Open
mattymatty76 opened this issue Mar 29, 2023 · 14 comments
Open

Comments

@mattymatty76
Copy link

mattymatty76 commented Mar 29, 2023

Ciao Andrea,
mi scuso in anticipo perché c'è una cosa strana, cioè provo a spiegarmi

  1. scaricato nuova libreria 3.0.0 e fatta girare in xampp ambiente di test che uso in locale (lo conoscerete meglio di me): funziona tutto senza problemi ed anche facendo le prove con l'url di test --> https://cohesioncollaudo.regione.marche.it anziché https://cohesion2.regione.marche.it

  2. libreria di cui sopra, appena testata in locale, la carico in produzione e non va: mi riporta gli errori seguenti

Eccezione - Impossibile recuperare il profilo utente da Cohesion2

Stack trace:

line 267 of /login/saml/Cohesion2.php: andreaval\Cohesion2\Cohesion2Exception thrown
line 152 of /login/saml/Cohesion2.php: call to andreaval\Cohesion2\Cohesion2->verify()
line 12 of /login/saml/login.php: call to andreaval\Cohesion2\Cohesion2->auth()

Buffer di output:
Notice: Trying to get property 'login' of non-object in /var/www/vhosts/.../login/saml/Cohesion2.php on line 258

da notare che il codice che uso nel file principale, login.php, e' questo

require_once('./Cohesion2.php');
use andreaval\Cohesion2\Cohesion2;
use andreaval\Cohesion2\Cohesion2Exception;

//check cohesion authentication
$cohesion = new Cohesion2();
$cohesion->useSAML20(true);
if(!$cohesion->isAuth()) $cohesion->auth();
...

ho provato anche a metterlo in try{...}catch(...) ma niente

dimenticavo, con il codice vecchio versione precedente funziona tutto...

grazie in anticipo come sempre e scusate...

@andreaval
Copy link
Owner

da quello che leggo sembra che non vada a buon fine la richiesta alla pagina:
https://cohesion2.regione.marche.it/SPManager/webCheckSessionSSO.aspx
(riga 253)

prova a decommentare riga 256:
//file_put_contents('log.txt',var_export($result,1)."\n",FILE_APPEND);
e vedere cosa risponde il server

forse ci potrebbe essere un problema di comunicazione tra il tuo server di produzione e quello regionale
saluti

@mattymatty76
Copy link
Author

mattymatty76 commented Mar 29, 2023

Grazie della risposta Andrea,
mi dice:

'<AUTH>NO</AUTH>'

quindi sicuramente fallisce nella comunicazione col server... ma la cosa strana è che con la vecchia libreria funziona e la chiamata e' sempre a https://cohesion2.regione.marche.it/

nella vecchia versione funzionante, la comunicazione se non erro avveniva tramite WS che non trovo piu' in quest'ultima 3.0.0

@andreaval
Copy link
Owner

andreaval commented Mar 29, 2023

prima di fare ulteriori prove chiudi la sessione con il metodo ->logout().

La risposta del server <AUTH>NO</AUTH> indica che il server risponde correttamente.
Risponde "NO" quando non sono valide le chiavi di sessione.

@andreaval
Copy link
Owner

il recupero del profilo nella 2.2 avviene tramite il WS https://cohesion2.regione.marche.it/SPManager/wsCheckSessionSPM.asmx
mentre nelle 3 avviene tramite la pagina web https://cohesion2.regione.marche.it/SPManager/webCheckSessionSSO.aspx

@mattymatty76
Copy link
Author

mattymatty76 commented Mar 29, 2023

niente le ho provate tutte, fatto come dicevi: ho messo anche il logout per accertarmi che non fosse quello.
Ho tolto anche l'if su isAuth ma niente: continua a darmi lo stesso errore... a questo punto sarei curioso di fare una prova con curl andando a passare i parametri del file_get_contents...
Comunque con il WS ed il vecchio codice gira, è quello che mi fa pensare... ma non sulla libreria ci mancherebbe sicuramente sono io che sbaglio qualcosa...
Fallisce sulla fase di recupero del profilo

https://cohesion2.regione.marche.it/SSO/webCheckSessionSSO.aspx

altrimenti la parte di login avviene bene, ma quando prova a recuperare il profilo genera gli errori esposti...

@mattymatty76
Copy link
Author

mattymatty76 commented Mar 29, 2023

Ti aggiorno giusto per conoscenza e completezza: ho appena fatto un test con curl dove al posto di

$result = file_get_contents($this->saml20 ? self::COHESION2_SAML20_WEB : self::COHESION2_WEB,false,$context);

ho messo questo codice

if (!function_exists('curl_init')) die('CURL is not installed!');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::COHESION2_SAML20_WEB);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($ch,  CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: 0'));
//curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'ECDHE-RSA-AES128-GCM-SHA256');
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);exit;

e ritorna la seguente risposta, ma sempre con quel NO che dicevamo

string(279) "HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html; charset=utf-8 Server: Microsoft-IIS/8.5 Set-Cookie: ASP.NET_SessionId=5eae2usyr5hwh4u20bqunlin; path=/; secure; HttpOnly; SameSite=None Date: Wed, 29 Mar 2023 18:45:04 GMT Content-Length: 15 NO"

@andreaval
Copy link
Owner

Mancano i parametri del POST. Prova così:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::COHESION2_SAML20_WEB);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query(['Operation'=>'GetCredential','IdSessioneSSO'=>$this->id_sso,'IdSessioneASPNET'=>$this->id_aspnet]));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'DEFAULT:!DH');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36');
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
$e=curl_error($ch);
if($e) throw new \Exception($e);
curl_close($ch);

@mattymatty76
Copy link
Author

Stesso risultato, però non va in eccezione: cioè stampa sempre il messaggio sopra, ma non dà alcun errore.
E' come se distruggesse/perdesse la sessione dopo la fase di autenticazione che comunque va a buon fine (l'autenticazione con il giro request / response ed il ritorno al referer chiamante, nel mio caso login.php).

@andreaval
Copy link
Owner

Decommanta tutte le righe di log della libreria e postami il contenuto del file log.txt. Vorrei capire in quale punto esatto si perdono i dati.

@mattymatty76
Copy link
Author

mattymatty76 commented Mar 30, 2023

preciso che ho anche aggiornato Cohesion2.php alla 3.0.1 e decommentando i log.txt ottengo:

andreaval\Cohesion2\Cohesion2::auth
andreaval\Cohesion2\Cohesion2::check
<dsAuth xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/Auth.xsd">
            <auth>
                <user />
                <id_sa />
                <id_sito>TEST</id_sito>
                <esito_auth_sa />
                <id_sessione_sa />
                <id_sessione_aspnet_sa />
                <url_validate><![CDATA[https://www.sitoweb.it/login/saml/login.php?cohesionCheck=1]]></url_validate>
                <url_richiesta><![CDATA[https://www.sitoweb.it/login/saml/login.php?cohesionCheck=1]]></url_richiesta>
                <esito_auth_sso />
                <id_sessione_sso />
                <id_sessione_aspnet_sso />
                <stilesheet>AuthRestriction=0,1,2,3</stilesheet>
                <AuthRestriction xmlns="">0,1,2,3</AuthRestriction>
            </auth>
        </dsAuth>
https://cohesion2.regione.marche.it/SPManager/WAYF.aspx?auth=PGRzQXV0aCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxucz0iaHR0cDovL3RlbXB1cmkub3JnL0F1dGgueHNkIj4KICAgICAgICAgICAgPGF1dGg%2BCiAgICAgICAgICAgICAgICA8dXNlciAvPgogICAgICAgICAgICAgICAgPGlkX3NhICc8%2BCiAgICAgICAgICAgICAgICA8aWRfc2l0bz5URVNUPC9pZF9zaXRvPgogICAgICAgICAgICAgICAgPGVzaXRvX2F1dGhfc2EgLz4KICAgICAgICAgICAgICAgIDxpZF9zZXNzaW9uZV9zYSAvPgogICAgICAgICAgICAgICAgPGlkX3Nlc3Npb25lX2FzcG5ldF9zYSAvPgogICAgICAgICAgICAgICAgPHVybF92YWxpZGF0ZT48IVtDREFUQVtodHRwczovL2VsZWFybmluZy5vc3BlZGFsaW1hcmNoZW5vcmQuaXQvbG9naW4vc2FtbC9sb2dpbi5waHA%2FY29oZXNcpb25DaGVjaz0xXV0%2BPC91cmxfdmFsaWRhdGU%2BCiAgICAgICAgICAgICAgICA8dXJsX3JpY2hpZXN0YT48IVtDREFUQVtodHRwczovL2VsZWFybmluZy5vc3BlZGFsaW1hcmNoZW5vcmQuaXQvbG9naW4vc2FtbC9sb2dpbi5waHA%2FY29oZXNpb25DaGVjaz0xXV0%2BPC91cmxfcmljaGllc3RhPgogICAgICAgICAgICAgICAgPGVzaXRvX2F1dGhfc3NvIC8%2BCiAgICAgICAgICAgICAgICA8aWRfc2Vzc2lvbmVfc3NvIC8%2BCiAgICAgICAgICAgICAgICA8aWRfc2Vzc2lvbmVfYXNwbmV0X3cNzbyAvPgogICAgICAgICAgICAgICAgPHN0aWxlc2hlZXQ%2BQXV0aFJlc3RyaWN0aW9uPTAsMSwyLDM8L3N0aWxlc2hlZXQ%2BCiAgICAgICAgICAgICAgICA8QXV0aFJlc3RyaWN0aW9uIHhtbG5zPSIiPjAsMSwyLDM8L0F1dGhSZXN0cmljdGlvbj4KICAgICAgICAgICAgPC9hdXRoPgogICAgICAgIDwvZHNBdXRoPg%3D%3D
andreaval\Cohesion2\Cohesion2::auth
andreaval\Cohesion2\Cohesion2::verify
<dsAuth xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/Auth.xsd"><auth><user>RLYZHK86D50F205E</user><id_sa /><id_sito>TEST</id_sito><esito_auth_sa /><id_sessione_sa /><id_sessione_aspnet_sa /><url_validate><![CDATA[https://www.sitoweb.it/login/saml/login.php?cohesionCheck=1]]></url_validate><url_richiesta><![CDATA[https://www.sitoweb.it/login/saml/login.php?cohesionCheck=1]]></url_richiesta><esito_auth_sso>OK</esito_auth_sso><id_sessione_sso>5ECEB3A4048E927E83AC7A8BBA9413B1B79D8D22A38C3A77BC37CAD50B4953A1F6136B7BF0CF8947E023A5895EB3217F7908BA3051B0E06D871EAB6CBF6DEF9A37D4B6BD472F87D85B0408A68EB23774C8CC6CC6C913CA75D36E6EA2A50B71AEA96245FC9567E7976D8353D334CB2AC6582DB146FB181999F54F17A9D21D696BF13FAA1F</id_sessione_sso><id_sessione_aspnet_sso>gsg4hjbnjm3ca02teett0dgk;cohesion2.regione.marche.it:idp; ;RLYZHK86D50F205E;RLYZHK86D50F205E;0000</id_sessione_aspnet_sso><stilesheet>AuthRestriction=0,1,2,3</stilesheet><AuthRestriction xmlns="">0,1,2,3</AuthRestriction><ip xmlns="">cohesion2.regione.marche.it</ip><UType xmlns="">CD</UType><url_logout xmlns=""> </url_logout><cittad xmlns="">0</cittad></auth></dsAuth>
Recupero profilo tramite pagina web
'<AUTH>NO</AUTH>'

@andreaval
Copy link
Owner

ho controllato il tuo file di log.
L'autenticazione avviene correttamente e le chiavi di sessione che ti ritornano sono valide.
Fallisce la chiamate a https://cohesion2.regione.marche.it/SPManager/webCheckSessionSSO.aspx
Il risultato che ottieni (NO) viene restituito quando le chiavi sono scadute (e non lo sono perché a me hanno funzionato) o quando si fa una chiamata non corretta.
A questo punto dipende sicuramente dalla configurazione del tuo server web. La chiamata HTTP che esegue per qualche motivo non invia correttamente i dati (con i web services è la libreria che svolge tale compito quindi un'errata configurazione del server non influisce).
Domanda: dato che la tua pagina lavora in HTTPS, il certificato del tuo server è valido? L'ora è sincronizzata?

@mattymatty76
Copy link
Author

Sì infatti è 100% come dici, il problema non è la libreria ma qualcosa in quella macchina che per qualche ragione fallisce...
Comunque, ho appena controllato l'ora del sistema ed è ok, inoltre il certificato e' un Let's Encrypt valido con scadenza a giugno 2023...
Con i WS funzionava per quello, solo c'era il problema dei certificati e di tutta la parte di handshake non banale...

@mattymatty76
Copy link
Author

Volevo ringraziarti, hai fatto un lavorone con questa libreria: bravo!!!
E grazie anche per la disponibilità e professionalità dimostrata.
Non ti disturbo oltre, abbiamo capito che non è un problema di libreria ma della macchina: anche se non nego la curiosità nel capire al di là di tutto che diamine ci sia che non va...

Mille grazie per l'aiuto!!!

@andreaval
Copy link
Owner

grazie @mattymatty76 !
Anch'io sarei curioso di capire il problema.
Comunque lascio la segnalazione aperta, così in caso novità possiamo aggiornare la discussione.
alla prossima, buon lavoro

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants