In modernen Netzwerkanwendungen ist Sicherheit von entscheidender Bedeutung. Um Benutzerdaten und Systemressourcen zu schützen, ist die Überprüfung von Zugriffstokens ein wesentlicher Schritt. Als leistungsstarke Lösung zur Identitätsauthentifizierung und Zugriffsverwaltung bietet Keycloak Entwicklern eine einfache und sichere Verifizierungsmethode. In diesem Artikel stellt der PHP-Editor Xigua vor, wie man Keycloak zur Überprüfung von Zugriffstokens verwendet, um die Anwendungssicherheit zu gewährleisten. Mit der Anleitung dieses Artikels können Sie die Überprüfung des Zugriffstokens einfach implementieren und sicherstellen, dass nur autorisierte Benutzer auf Ihre Anwendung zugreifen können.
Frageninhalt
Ich versuche, die Zugriffstoken-Verifizierung mit GO zu implementieren. Aber die Beispiele, die ich online gesehen habe, scheinen nur TOKEN_SECRET zu verwenden, um es zu validieren. Aber ich bin es gewohnt, in Java Spring zu programmieren und muss TOKEN_SECRET nicht verwenden. Ich stelle einfach die jwk-set-uri zur Verfügung und sie prüft auf Gültigkeit (automatische Sicherheitsfilter usw.) und ich weiß, dass sie mit dem OAuth-Server kommuniziert und diese Validierung durchführt.
Gibt es in Go keine Bibliothek, die durch eine Anfrage an den OAuth-Server prüfen kann, ob das Token gültig ist?
Ich weiß, dass ich dies manuell tun kann, indem ich eine Anfrage an den Benutzerinfo-Endpunkt des OAuth-Servers stelle:
http://localhost:8080/auth/realms/<your_realm>/protocol/openid-connect/userinfo
(Token im Header mit Schlüsselautorisierung einschließen)
Aber ich weiß nicht, ob das völlig dem Standard entspricht.
Was ist der richtige Ansatz?
Workaround
Kurze Antwort: Verwenden Sie go-oidc
Lange Antwort:
Lassen Sie uns zunächst verstehen, wie Spring Security JWT-Zugriffstoken automatisch validiert. Wenn Sie sich in application.yaml
配置文件中定义 OAuth 2.0 或 OIDC 客户端属性,Spring 将自动在安全过滤器链中连接一个过滤器,从 Keycloak 中获取 jwk-set
befinden, handelt es sich bei Keycloak vereinbarungsgemäß um einen Satz öffentlicher Schlüssel, die den Schlüsseln entsprechen, die Keycloak zum Signieren von Token verwendet. Der Filter wird auf alle geschützten Routen angewendet und Spring verwendet den öffentlichen Schlüssel, um zu prüfen, ob die Signatur des Tokens gültig ist, und führt gegebenenfalls weitere Prüfungen durch (Zielgruppe, Zeitüberschreitung usw.)
Wie machen wir das also in Go? Wir können eine einfache Middleware schreiben, die akzeptiert, ob der Zeitpunkt der jwk-set
并使用它来验证令牌。您需要检查 alg
声明以查看使用了哪种签名算法,从 jwk-set
中选择相应的公钥并检查签名是否有效。然后,解码令牌,确认 iss
和 sub
声明,以确保它来自受信任的颁发者并面向目标受众,并检查它是否尚未过期。检查 nbf
(不早于)和 iat
(veröffentlicht am)-Anweisung korrekt ist. Schließlich werden relevante Informationen aus dem Token bei Bedarf in den Anforderungskontext eingefügt.
func JWTMiddleware(jwkSet map[string]*rsa.PublicKey) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { authHeader := r.Header.Get("Authorization") if authHeader == "" { http.Error(w, "Authorization header is required", http.StatusUnauthorized) return } tokenString := strings.TrimPrefix(authHeader, "Bearer ") token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) } alg := token.Method.Alg() publicKey, ok := jwkSet[alg] if !ok { return nil, fmt.Errorf("no key found for signing method: %v", alg) } return publicKey, nil }) if err != nil || !token.Valid { http.Error(w, "Invalid token", http.StatusUnauthorized) return } // Other checks, ISS, Aud, Expirey, etc ... // If needed, store the user principal // and other relevant info the request context next.ServeHTTP(w, r) }) } }
Das obige ist der detaillierte Inhalt vonGO-Zugriffstoken authentifizieren (Keycloak). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Die Hauptunterschiede zwischen Golang und Python sind Parallelitätsmodelle, Typsysteme, Leistung und Ausführungsgeschwindigkeit. 1. Golang verwendet das CSP -Modell, das für hohe gleichzeitige Aufgaben geeignet ist. Python verlässt sich auf Multi-Threading und Gil, was für I/O-intensive Aufgaben geeignet ist. 2. Golang ist ein statischer Typ und Python ist ein dynamischer Typ. 3.. Golang kompilierte Sprachausführungsgeschwindigkeit ist schnell und Python interpretierte die Sprachentwicklung schnell.

Golang ist in der Regel langsamer als C, aber Golang hat mehr Vorteile für die gleichzeitige Programmier- und Entwicklungseffizienz: 1) Golangs Müllsammlung und Parallelitätsmodell macht es in hohen Parallelitätsszenarien gut ab. 2) C erhält eine höhere Leistung durch das manuelle Speichermanagement und die Hardwareoptimierung, weist jedoch eine höhere Komplexität der Entwicklung auf.

Golang wird häufig in Cloud -Computing und DevOps verwendet, und seine Vorteile liegen in Einfachheit, Effizienz und gleichzeitigen Programmierfunktionen. 1) Beim Cloud Computing behandelt Golang effizient gleichzeitige Anforderungen über Goroutine- und Kanalmechanismen. 2) In DevOps machen Golangs schnelle Zusammenstellung und plattformübergreifende Funktionen die erste Wahl für Automatisierungswerkzeuge.

Golang und C haben jeweils ihre eigenen Vorteile bei der Leistungseffizienz. 1) Golang verbessert die Effizienz durch Goroutine- und Müllsammlung, kann jedoch eine Pause einführen. 2) C realisiert eine hohe Leistung durch das manuelle Speicherverwaltung und -optimierung, aber Entwickler müssen sich mit Speicherlecks und anderen Problemen befassen. Bei der Auswahl müssen Sie Projektanforderungen und Teamtechnologie -Stack in Betracht ziehen.

Golang eignet sich besser für hohe Parallelitätsaufgaben, während Python mehr Vorteile bei der Flexibilität hat. 1. Golang behandelt die Parallelität effizient über Goroutine und Kanal. 2. Python stützt sich auf Threading und Asyncio, das von GIL betroffen ist, jedoch mehrere Parallelitätsmethoden liefert. Die Wahl sollte auf bestimmten Bedürfnissen beruhen.

Die Leistungsunterschiede zwischen Golang und C spiegeln sich hauptsächlich in der Speicherverwaltung, der Kompilierungsoptimierung und der Laufzeiteffizienz wider. 1) Golangs Müllsammlung Mechanismus ist praktisch, kann jedoch die Leistung beeinflussen.

Wählen SieGolangforHighperformanceConcurcurrency, idealforbackendServicesandNetworkProgramming; selectPythonforrapidDevelopment, DataScience und MachinelearningDuEToSverseStilityAntenSiveselibrary.

Golang und Python haben jeweils ihre eigenen Vorteile: Golang ist für hohe Leistung und gleichzeitige Programmierung geeignet, während Python für Datenwissenschaft und Webentwicklung geeignet ist. Golang ist bekannt für sein Parallelitätsmodell und seine effiziente Leistung, während Python für sein Ökosystem für die kurze Syntax und sein reiches Bibliothek bekannt ist.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.