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

Anomalia creazione Token client_credentials (per comunicazioni con ANPAL) #69

Closed
RegioneMarcheCirillo opened this issue Oct 13, 2020 · 1 comment
Labels
bug Something isn't working

Comments

@RegioneMarcheCirillo
Copy link

RegioneMarcheCirillo commented Oct 13, 2020

Impostando il gateway per fruire delle API esposte da ANPAL, con autenticazione Client_Credential, il messaggio http generato per la richiesta del token è il seguetne:

================================

POST /token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxx
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/11.0.8
Host: testapigtw.anpal.gov.it
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Transfer-Encoding: chunked

1e
&grant_type=client_credentials
0

================================

Il server anpal non genera il token e risponde con errore 500.
Il body ha una "&" iniziale che credo generi il problema.

Riproduzione del problema

Configurare una API in fruizione utilizzando una token policy client_credential di tipo Basic, Authorization Header Request Field; io ho impostato il servizio http://testapigtw.anpal.gov.it/token

Risultato atteso:

Facendo una identica chiamata con SOAPUI, senza mettere la & (e senza codifica chunked), il server ANPAL genera correttamente il token

Esempio di richiesta http corretta:

================================

POST http://testapigtw.anpal.gov.it/token HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/x-www-form-urlencoded
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx
Content-Length: 29
Host: testapigtw.anpal.gov.it
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

grant_type=client_credentials

================================

(Oppure esiste un modo per configurare il Gateway in modo da comunicare correttamente col server dei token di ANPAL?)

Ambiente:

  • OS: Ubuntu 18.04
  • Browser: tutti
  • GovWay: [e.g. 3.2.2]
  • AS: Tomcat 9
  • Java: openjdk 11.0.8 2020-07-14
  • DBMS: MySQL Server version: 5.7.31-0ubuntu0.18.04.1 (Ubuntu)

Note aggiuntive:

Osservando il codice GestoreToken.Java, linea 2635, utilizza un
String prefixUrl = "PREFIX?";

chiama poi la funzione
buildLocationWithURLBasedParameter

che esegue:

			while (keys.hasNext()) {
				if(urlBuilder.toString().contains("?")==false)
					urlBuilder.append("?");
				else
					urlBuilder.append("&");

non ho eseguito il codice, ma credo che così otteniamo quindi in uscita:
"PREFIX?&key=valore"

e ci si porta dietro il caratere & quando si va ad isolare il prefix in GestoreToken.Java, linea 2637
contentString = contentString.substring(prefixUrl.length());

@RegioneMarcheCirillo RegioneMarcheCirillo added the bug Something isn't working label Oct 13, 2020
andreapoli added a commit that referenced this issue Oct 14, 2020
(#69)
Sia nella funzionalità di negoziazione dei token che durante la verifica tramite servizio di introspection e userInfo, viene adesso utilizzata la modalità http 'content-length' al posto della precedente modalità 'transfer-encoding-chunked'.
Nella negoziazione del token è stato inoltre corretto il body della richiesta 'application/x-www-form-urlencoded' eliminando il primo carattere '&' aggiunto erroneamente (es. &grant_type=client_credentials).
@andreapoli
Copy link
Member

Ciao @RegioneMarcheCirillo, ti ringrazio per la dettagliata descrizione.

In tutti i vari scenari dove abbiamo utilizzato la funzionalità per negoziare un token, i vari authorization server interrogati non avevano mai segnalato la richiesta come errata, restituendoci sempre il token, e quindi non ci eravamo mai accorti del problema.

Il problema che riscontri potrebbe anche non essere legato al carattere iniziale '&' ma bensì alla modalità di trasmissione 'Transfer-Encoding: chunked'.

Ho corretto sia il problema del carattere '&' che impostato una modalità di trasmissione 'content-length' sul branch 3.3.2.issue69.

Puoi generarti una nuova versione dell'installer tramite il comando 'mvn package' seguendo le istruzioni indicate nel file README.compile.

Se preferisci puoi anche intervenire puntualmente, senza ri-eseguire l'installer, utilizzando il comando 'mvn compile' e sostituendo il file presente all'interno dell'archivio govway.ear/lib/openspcoop2_pdd-3.3.2.jar con quello risultante dalla compilazione che troverai nella radice in dist/openspcoop2_pdd-3.3.2.jar

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants