Wie verwalten Sie die Authentifizierung für diejenigen, die RESTful-APIs und JS-Front-End-Apps in Go erstellen? Verwenden Sie bestimmte Bibliotheken oder Techniken?
Ich bin überrascht, so wenig Diskussion darüber zu finden. Ich denke an Antworten wie die folgenden und versuche zu vermeiden, meine eigene Implementierung zu entwickeln:
Authentifizierungsformular in ASP.Net
Codiert jeder seine eigene Lösung separat?
authentication
go
SexxLuthor
quelle
quelle
Antworten:
Diese Frage erhält eine Menge Aufrufe - und hat ein Abzeichen für beliebte Fragen -, daher weiß ich, dass es ein großes latentes Interesse an diesem Thema gibt, und viele Leute fragen genau das Gleiche und finden keine Antworten in den Interwebs.
Die meisten verfügbaren Informationen führen zu dem Textäquivalent der Handwellensache, das als "Übung für den Leser" übrig bleibt. ;)
Ich habe jedoch endlich ein konkretes Beispiel gefunden, das (großzügig) von einem Mitglied der Golang-Nuts-Mailingliste zur Verfügung gestellt wurde:
https://groups.google.com/forum/#!msg/golang-nuts/GE7a_5C5kbA/fdSnH41pOPYJ
Dies bietet ein vorgeschlagenes Schema und eine serverseitige Implementierung als Grundlage für die benutzerdefinierte Authentifizierung. Der clientseitige Code liegt immer noch bei Ihnen.
(Ich hoffe, der Autor des Beitrags sieht dies: Danke!)
Auszug (und neu formatiert):
"Ich würde so etwas wie das folgende Design vorschlagen:
quelle
Eine weitere mögliche Lösung ist Authboss , die vor kurzem auf dem Mailing angekündigt Liste .
(Ich habe nicht versucht, diese Bibliothek zu verwenden.)
Siehe auch Bester Weg, um eine Webanwendung mit Benutzerauthentifizierung zu erstellen?
quelle
Sie würden Middleware verwenden, um die Authentifizierung durchzuführen.
Sie können go-http-auth für Basis- und Digest-Authentifizierung und Gomniauth ausprobieren für OAuth2 ausprobieren.
Wie Sie sich authentifizieren, hängt jedoch von Ihrer App ab.
Durch die Authentifizierung wird der Status / Kontext in Ihre http.Handler eingeführt, und darüber wurde in letzter Zeit diskutiert.
Bekannte Lösungen für das Kontextproblem sind Gorilla / Kontext und Google-Kontext, die hier beschrieben werden .
Ich habe eine allgemeine Lösung , ohne die Notwendigkeit des globalen Zustandes in go-on / Wrap , die zusammen oder ohne die beiden anderen verwendet werden kann und sich gut in kontextfreie Middleware integrieren lässt.
wraphttpauth bietet die Integration von go-http-auth mit go-on / wrap.
quelle
go-http-auth
odergomniauth
oder beide?Beantwortung dieser Frage im Jahr 2018. Ich schlage vor, JWT (JSON Web Token) zu verwenden. Die Antwort, die Sie als gelöst markiert haben, hat den Nachteil, dass es sich um die Reise handelt, die sie vorne (Benutzer) und hinten (Server / Datenbank) unternommen hat. Was schlimmer ist, wenn Benutzer häufig Anfragen gestellt haben, die eine Authentifizierung erfordern, führt zu einer aufgeblähten Anfrage von / zu Server und Datenbank. Um dies zu lösen, verwenden Sie JWT, das das Token auf Benutzerseite speichert, das vom Benutzer jederzeit verwendet werden kann, wenn er Zugriff / Anforderung benötigt. Es ist nicht erforderlich, zur Datenbank- und Serververarbeitung zu wechseln, um die Gültigkeit des Tokens zu überprüfen.
quelle
Ein weiteres Open-Source-Paket für die Authentifizierung mit Cookies ist httpauth .
(übrigens von mir geschrieben)
quelle
Ehrlich gesagt gibt es viele Authentifizierungsmethoden und -techniken, die Sie in Ihre Anwendung einbinden können und die von der Geschäftslogik und den Anforderungen der Anwendungen abhängen.
Zum Beispiel Oauth2, LDAP, lokale Authentifizierung usw.
Meine Antwort geht davon aus, dass Sie nach lokaler Authentifizierung suchen, was bedeutet, dass Sie die Benutzeridentitäten in Ihrer Anwendung verwalten. Der Server muss eine Reihe externer APIs bereitstellen, mit denen Benutzer und Administratoren die Konten verwalten können und wie sie sich gegenüber dem Server identifizieren möchten, um eine vertrauenswürdige Kommunikation zu erreichen. Am Ende erstellen Sie eine DB-Tabelle mit den Benutzerinformationen. wo das Passwort aus Sicherheitsgründen gehasht wird Siehe Speichern des Kennworts in der Datenbank
Nehmen wir App-Anforderungen an, um Benutzer anhand einer der folgenden Methoden zu authentifizieren:
Basisauthentifizierung (Benutzername, Kennwort):
Diese Authentifizierungsmethode hängt von den Benutzeranmeldeinformationen ab, die im Autorisierungsheader festgelegt sind, der in base64 codiert und in rfc7617 definiert ist ist. Wenn die App den Benutzer empfängt, fordert er die Dekodierung der Autorisierung an und das Kennwort erneut, um es innerhalb der Datenbank zu vergleichen Hash, wenn es übereinstimmt, hat der authentifizierte Benutzer andernfalls den 401-Statuscode an den Benutzer zurückgegeben.
Zertifikatsbasierte Authentifizierung:
Diese Authentifizierungsmethode hängt von einem digitalen Zertifikat ab, um einen Benutzer zu identifizieren. Sie wird als x509-Authentifizierung bezeichnet. Wenn die App die Benutzeranforderungen empfängt, liest sie das Zertifikat des Clients und überprüft, ob es mit dem bereitgestellten CA-Stammzertifikat übereinstimmt zur APP.
Bearer-Token:
Diese Authentifizierungsmethode hängt von kurzlebigen Zugriffstoken ab. Das Bearer-Token ist eine kryptische Zeichenfolge, die normalerweise vom Server als Antwort auf eine Anmeldeanforderung generiert wird. Wenn die App die Benutzeranforderungen empfängt, liest sie die Autorisierung und validiert das Token, um den Benutzer zu authentifizieren.
Ich würde jedoch Go-Guardian empfehlen für die Authentifizierungsbibliothek die über eine erweiterbare Reihe von Authentifizierungsmethoden ausgeführt wird, die als Strategien bezeichnet werden. Grundsätzlich stellt Go-Guardian keine Routen bereit oder nimmt kein bestimmtes Datenbankschema an, was die Flexibilität maximiert und es dem Entwickler ermöglicht, Entscheidungen zu treffen.
Das Einrichten eines Go-Guardian-Authentifikators ist unkompliziert.
Hier das vollständige Beispiel der oben genannten Methoden.
Verwendung:
Sie können mehrere Authentifizierungsmethoden gleichzeitig aktivieren. Normalerweise sollten Sie mindestens zwei Methoden anwenden
quelle
Werfen Sie einen Blick auf Labstack Echo - es packt die Authentifizierung für RESTful-APIs und Frontend-Anwendungen in Middleware, mit der Sie bestimmte API-Routen schützen können.
Das Einrichten der Basisauthentifizierung ist beispielsweise so einfach wie das Erstellen eines neuen Subrouters für die
/admin
Route:Hier finden Sie alle Middleware-Authentifizierungsoptionen von Labstack.
quelle