18 messaggi dal 09 maggio 2005
Il doppio apice è un errore mio in fase di trascrizione nel post, per cui la stringa corretta è questa:

oRequest.Headers.Add("grant_type", "psw&username=usr&password=psw")


Giusto per chiarezza la documentazione in cui ci sono le chiamate da fare mi riporta questo per HTTP request:

POST baseurl/auth/signin HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=UTF-8

grant_type=password&username=Utente&password=Password


Questo per HTTP response:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 287

{
"access_token" : "5a74190d2976e5a6",
"token_type" : "bearer",
"expires_in" : 1800,
"refresh_token" : "6643bfe8383daace",
"userName" : "Utente",
"as:client_id" : "Auth",
".issued" : "Tue, 24 Aug 2021 10:35:48 GMT",
".expires" : "Tue, 24 Aug 2021 11:05:48 GMT"
}


Questo in caso di errore:

HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Content-Length: 101

{
"error" : "invalid_grant",
"error_description" : "The user name or password is incorrect."
}


Ciao
120 messaggi dal 19 ottobre 2005
Li si tratta delle specifiche del web service che non conosco, devi rivolgerti all'assistenza di Aruba (mi pare sia Aruba che ti fornisce l'uso di quel web service). L'uso della classe
HttpClient
è corretta.

Noto però questa cosa:

Loro (Aruba) ti scrivono nelle specifiche

grant_type=password&username=Utente&password=Password


metre tu nel tuo codice passi:

grant_type=psw&username=usr&password=psw


Immagino che il parametro
usr
ed il secondo
psw
sia corretto (e sostituiti dalla tua username e password), ma il primo, subot dopo
gran_type=
non deve essere la stringa
password
? è una mia considerazione, come ti ho già scritto non conosco il servizio di Aruba.
196 messaggi dal 12 febbraio 2016
Ciao,
potresti mettere l'url della documentazione Aruba?
18 messaggi dal 09 maggio 2005
Ciao
questo il link della documentazione
Modificato da santonim il 08 settembre 2021 14:22 -
18 messaggi dal 09 maggio 2005
Ciao
Ulteriore step: ora mi ritorna uno status code 405
Il 405 è tipicamente un errore lato server ma è più probabile che l'errore viene ritornato perché il metodo HTTP che utilizzo non è consentito da Aruba.

Dalla documentazione, che vi ho inoltrato, le informazioni vanno passate nel "body"; io invece utilizzo:

oRequest.Headers.Add("grant_type", Usr_Xml_csApiPassword & "&username=" & Usr_Xml_csApiUser & "&password=" & Usr_Xml_csApiPassword)

per cui mi sa che passo le informazioni nella "query string" anziché nella "request body"

Come faccio ad impostare la "request body" nell'oggetto oRequest che è un Net.Http.HttpRequestMessage ?

Grazie
120 messaggi dal 19 ottobre 2005
L'errore HTTP 405 corrisponde a METHOD NOT ALLOWED, non è propriamente un errore lato server (gli errori lato server sono quelli con codice HTTP 5xx) ma un errore che ti indica che una risorsa non è stata trovata (appartiene alla stessa categoria, HTTP 4xx, anche l'errore HTTP 404). Nel tuo caso l'errore HTTP 405 potrebbe dipendere dal fatto che non stai passando correttamente qualcosa.

Nel tuo caso NON stai passando nulla nella request string ma stai usando l'header HTTP per passare le informazioni.

Per passare la stringa nella request body devi usare la proprietà Content dell'oggetto HttpRequestMessage.
Nel tuo caso dovrebbe essere qualcosa tipo il seguente codice:

' ...
oRequest.Content = New StringContent("grant_type=password&username=Utente&password=Password")
' ...


Ciao.
18 messaggi dal 09 maggio 2005
Esatto. Prima del tuo post ho usato l'istruzione come quella da te suggerita e funziona.
Ora mi ritorna 200 e fino qui va bene.

Ora c'è il problema di leggere la risposta; a seguire la routine che ho creato e dove l'oggetto oContent ritorna Nothing

Public Async Sub SubSignin()
Dim oClient As New Net.Http.HttpClient
Dim oRequest As New Net.Http.HttpRequestMessage
Dim oContent As Net.Http.HttpContent

Try
oRequest.RequestUri = New Uri(Usr_Xml_csUrlAutDemo & "/auth/signin")
oRequest.Content = New Net.Http.StringContent("username=" & Usr_Xml_csApiUser & "&password=" & Usr_Xml_csApiPassword & "&grant_type=" & Usr_Xml_csApiPassword)

Try
oResponseMessage = Await oClient.SendAsync(oRequest)
Catch ex As Exception
End Try

oContent = oResponseMessage.Content

Catch ex As Exception
Beep()
End Try
End Sub
18 messaggi dal 09 maggio 2005
Cosa strana: il code 200 lo ricevo anche se la passowrd è errata o se uso una Content diversa: ho provato con questo:

oRequest.Content = New Net.Http.StringContent("grant_type=" & Usr_Xml_csApiPassword & "&username=" & Usr_Xml_csApiUser & "&password=" & Usr_Xml_csApiPassword)

e torna 200; il che mi fa presupporre che la "SendAsync" non sia l'istruzione corretta

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.