6 messaggi dal 09 ottobre 2006
Buongiorno,

sto cercando di connettermi a un restful webservice non sviluppato da me (aruba...), riesco ad ottenere il token di autenticazione ma quando lo utilizzo per accedere ai metodi ottengo il messaggio "Errore di Autenticazione".

Dopo aver ottenuto il token, provo a eseguire il post di un file, specificando il token nell'header

var invoiceObj = new InvoiceUploadObj { dataFile = file, credential = "", domain = "" };
var invoiceObjSerialized = JsonConvert.SerializeObject(invoiceObj);
var data = new StringContent(invoiceObjSerialized, Encoding.UTF8, "application/json");

HttpClient clientDemoWS = new HttpClient();
clientDemoWS.BaseAddress = new Uri("https://demows.fatturazioneelettronica.aruba.it/");
clientDemoWS.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
clientDemoWS.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", String.Format("Bearer {0}", bearer_token));
                
HttpResponseMessage responseUpload = clientDemoWS.PostAsync("/services/invoice/upload", data).Result;


Lo Status Code restituito è 200, ma quando deserializzo la risposta del server ottengo per l'appunto errorCode 0012 - errorDescription Errore Autenticazione.

Controllando con Fiddler vedo che l'header contiene l'authorization token

POST /services/invoice/upload HTTP/1.1
Accept: application/json
Authorization: Bearer eyJ0eXAi......
Content-Type: application/json; charset=utf-8
Host: https://demows.fatturazioneelettronica.aruba.it/
Content-Length: 4623
Expect: 100-continue


Dove sbaglio?
Modificato da franksnet il 17 novembre 2018 05.39 -
11.097 messaggi dal 09 febbraio 2002
Contributi
Ciao,
sto vedendo la documentazione di Aruba.
https://fatturazioneelettronica.aruba.it/apidoc/docs.html#_autenticazione

Per ottenere il token devi inviare una richiesta del genere:
POST /auth/signin?grant_type=password&username=Utente&password=Password HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 53
Host: localhost:8080

grant_type=password&username=Utente&password=Password


E otterrai questa risposta
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 276

{
  "access_token" : "2d18a0c6781f4ec8",
  "token_type" : "bearer",
  "expires_in" : 1800,
  "refresh_token" : "53cba02bd4d6dab7",
  "client_id" : "123456",
  "userName" : "Utente",
  ".issued" : "2018-11-13T14:57:37.403Z",
  ".expires" : "2018-11-13T15:27:37.403Z"
}


L'access token che vedi lì è appunto quello che dovrai usare nelle successive richieste nell'header Authorization.
Authorization: Bearer 2d18a0c6781f4ec8


Vedo invece che tu stai inviando quello che sembra essere un contenuto base64. Come l'hai ottenuto? Ecco cosa stai inviando:
Authorization: Bearer eyJ0eXAi......


ciao,
Moreno

Enjoy learning and just keep making
6 messaggi dal 09 ottobre 2006
Il token lo ottengo chiamando un altro metodo del ws, a cui passo i parametri in questo modo

var values = new Dictionary<string, string>();
values.Add("grant_type", "password");
values.Add("username", "***");
values.Add("password", "***");
var content = new FormUrlEncodedContent(values);

HttpClient clientAuth = new HttpClient();
clientAuth.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = clientAuth.PostAsync("https://demoauth.fatturazioneelettronica.aruba.it/auth/signin", content).Result;


... dopo di che deserializzo la risposta del servizio con JsonConvert
Modificato da franksnet il 17 novembre 2018 19.48 -
Modificato da franksnet il 17 novembre 2018 19.49 -
11.097 messaggi dal 09 febbraio 2002
Contributi
Sembra ok e in linea con la loro guida. Comunque usa Fiddler per verificare che la richiesta che mandi sia esattamente come quella descritta nella guida. In caso postala qui: in questa fase è più interessante vedere le richieste grezze che invii (e le relative risposte) piuttosto che il codice C#.

Il token lo ottengo chiamando un altro metodo del ws

Sì, è quello riportato nella guida. Quindi il token che ti restituiscono è una roba codificata in base64 e non esadecimale come mostrato nella guida?

ciao,
Moreno

Enjoy learning and just keep making
6 messaggi dal 09 ottobre 2006
Questa è la risposta che ottengo quando richiedo il token, quindi direi che la risposta è si, sembra codificato in base 64

HTTP/1.1 200
Server: nginx/1.14.0
Date: Sat, 17 Nov 2018 19:23:32 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 570
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET

{"access_token":"eyJ0eXAi......","token_type":"bearer","expires_in":1799,"refresh_token":"41825bf8......","as:client_id":"Auth","userName":"****",".issued":"Sat, 17 Nov 2018 19:23:31 GMT",".expires":"Sat, 17 Nov 2018 19:53:31 GMT"}


Mentre quando provo a postare il file la risposta è:
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Sat, 17 Nov 2018 19:23:41 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 85
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Expires: -1

{"uploadFileName":null,"errorCode":"0012","errorDescription":"Errore autenticazione"}

Modificato da franksnet il 17 novembre 2018 20.34 -
11.097 messaggi dal 09 febbraio 2002
Contributi
Boh, sembra tutto ok. Hai provato anche a chiedere assistenza ad Aruba?

Enjoy learning and just keep making
6 messaggi dal 09 ottobre 2006
BrightSoul ha scritto:
Boh, sembra tutto ok. Hai provato anche a chiedere assistenza ad Aruba?


No, ma a questo punto provvedo...
6 messaggi dal 09 ottobre 2006
In attesa della risposta di Aruba, non riesco a fare andare nemmeno le chiamate GET ai metodi che restituiscono l'elenco delle fatture. Dopo aver ottenuto il token e averlo usato come valore corrente della proprietà DefaultRequestHeaders.Authorization, con

HttpResponseMessage response = client.
                GetAsync(String.Format("https://demows.fatturazioneelettronica.aruba.it/services/invoice/in/findByUsername?username={0}", "*****")).Result;


non ottengo risposta 200 bensì questo:
HTTP/1.1 401
Server: nginx/1.14.0
Date: Mon, 19 Nov 2018 05:16:57 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-store
Pragma: no-cache
WWW-Authenticate: Bearer realm="null", error="unauthorized", error_description="Full authentication is required to access this resource"
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY

66
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}
0


nonostante l'authorization header sia impostato:

Authorization Header is present: Authorization Bearer eyJ0eXAi....



Idee?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.