HI zusammen,
wie vielleicht in anderen Threads bei Datenbankprogrammierung schon gesehen über ich mich zurzeit zum ersten Mal in der Nutzung einer REST-API. Was ich bisher geschafft habe:
Das Token habe ich mit einem webClient erfolgreich abgeholt. Nur das Cookie bekomme ich damit wohl nicht.
Was ich im Web so finde, bezieht sich immer auf HttpRequest etc.
Meine Fragen:
Der Fehler den ich bislang - logischerweise - bekomme ist ein "nicht authorisiert"
Die API ist erreichbar unter: kfzmanager.abacado.net/auth/api.php (direkt aufgerufen natürlich mit Fehler - wenn die POST-Daten korrekt übergeben werden, mit dem Token als Return)
Um das Token und das Session-Cookie zur erhalten im Browser, kann kfzmanager.abacado.net/login.html verwendet werden (admin, admin)
Die API kann dann mit kfzmanager.abacado.net/auth/api.php?csrf=tokenhiereingeben aufgerufen werden (ohne korrektes Token und korrekte Session mit Fehler)
Ich freue mich auf Hinweise und Tipps.
Bin hier wohl noch ganz am Anfang mit meinem Wissen
p.s. wäre es ggf. einfacher, nur Benutzername und Passwort zu verwenden? Ohne Token und/oder Session?
Idee wäre dann: Username und gehashtes Passwort per Post zu übertragen. Gehashtes Passwort mit Hash in der DB prüfen.
Wenn korrekt: Authorisierung OK.
Danke!
KlyX
wie vielleicht in anderen Threads bei Datenbankprogrammierung schon gesehen über ich mich zurzeit zum ersten Mal in der Nutzung einer REST-API. Was ich bisher geschafft habe:
- REST-API soweit aufsetzen, dass sie funktioniert --> Benutze das projekt hier: github.com/mevdschee/php-crud-ap
- Abruf der Daten in VB --> funktioniert mit JSON.net soweit einwandfrei
- Absicherung der API über das "Zusatzmodul" von der obig benutzten REST-API: github.com/mevdschee/php-api-auth
--> Funktioniert über den Browser einwandfrei - Übertragung der "Logindaten" per Post mit einem webClient --> klappt und erhalte ein Token zurück
Das Token habe ich mit einem webClient erfolgreich abgeholt. Nur das Cookie bekomme ich damit wohl nicht.
Was ich im Web so finde, bezieht sich immer auf HttpRequest etc.
Meine Fragen:
- Krieg ich das Session-Cookie ggf. auch einfach über meinen webClient (Code siehe unten) und dann wieder zurück beim Aufruf einer URL - oder muss ich das Ganze anders aufziehen?
- Wenn ja: was wäre dabei sinnvoll?
- Muss ich eigentlich das Token und das Cookie im gleichen webclient abrufen und wieder senden? Eigentlich ja oder? Sonst ist es ja eine andere Session, die ich öffne, richtig?
VB.NET-Quellcode
- Private Sub get_json_Click(sender As Object, e As EventArgs) Handles get_json.Click
- Using webClient As WebClient = New System.Net.WebClient()
- Dim n As WebClient = New WebClient()
- 'Logindaten an PHP-Datei per POST übergeben
- n.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
- Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes("username=" & api_user.Text & "&password=" & api_pass.Text)
- Dim bytRetData As Byte() = n.UploadData("https://kfzmanager.abacado.net/auth/api.php", "POST", bytArguments)
- 'Antwort von Server in String speichern, Anführungszeichen entfernen und in TextBox eintragen
- Dim answerstring As String = System.Text.Encoding.ASCII.GetString(bytRetData)
- answerstring = answerstring.Replace(Chr(34), "")
- api_token.Text = answerstring
- 'MessageBox zur Prüfung der korrekten URL, die aufgerufen wird
- MessageBox.Show(json_url.Text & "?csrf=" & answerstring)
- 'JSON URL zusammenstelle inkl. Token und abrufen
- Dim json = n.DownloadString(json_url.Text & "?csrf=" & answerstring)
- Dim tokens As JToken() = JObject.Parse(json).SelectToken("fuel").SelectToken("records").ToArray()
- Dim fuels As New List(Of Fuel)
- For Each x As JToken In tokens
- fuels.Add(New Fuel With {.ID = x(0).Value(Of Integer), .FuelName = x(1).Value(Of String), .FuelType = x(2).Value(Of String)})
- Next
- json_dgv.DataSource = fuels
- End Using
- End Sub
Der Fehler den ich bislang - logischerweise - bekomme ist ein "nicht authorisiert"
Die API ist erreichbar unter: kfzmanager.abacado.net/auth/api.php (direkt aufgerufen natürlich mit Fehler - wenn die POST-Daten korrekt übergeben werden, mit dem Token als Return)
Um das Token und das Session-Cookie zur erhalten im Browser, kann kfzmanager.abacado.net/login.html verwendet werden (admin, admin)
Die API kann dann mit kfzmanager.abacado.net/auth/api.php?csrf=tokenhiereingeben aufgerufen werden (ohne korrektes Token und korrekte Session mit Fehler)
Ich freue mich auf Hinweise und Tipps.
Bin hier wohl noch ganz am Anfang mit meinem Wissen
p.s. wäre es ggf. einfacher, nur Benutzername und Passwort zu verwenden? Ohne Token und/oder Session?
Idee wäre dann: Username und gehashtes Passwort per Post zu übertragen. Gehashtes Passwort mit Hash in der DB prüfen.
Wenn korrekt: Authorisierung OK.
Danke!
KlyX
Chris' Weblog - Mein Blog rund um Vieles
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KlyX“ ()