Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Backend-Entwicklung Golang GO-Zugriffstoken authentifizieren (Keycloak)

GO-Zugriffstoken authentifizieren (Keycloak)

Feb 09, 2024 am 09:30 AM
spring security

GO 验证访问令牌(keycloak)

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
Nach dem Login kopieren

(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 中选择相应的公钥并检查签名是否有效。然后,解码令牌,确认 isssub 声明,以确保它来自受信任的颁发者并面向目标受众,并检查它是否尚未过期。检查 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)
        })
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Spring Security 6: cors() ist veraltet und zum Entfernen markiert Spring Security 6: cors() ist veraltet und zum Entfernen markiert Feb 10, 2024 pm 11:45 PM

我有下面的代码:publicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{returnhttp.httpBasic().disable().cors().and().csrf().disable().authorizeHttpRequests().requestMatchers("

So entwickeln Sie ein Spring Security SAML-basiertes Single-Sign-On-System mit Java So entwickeln Sie ein Spring Security SAML-basiertes Single-Sign-On-System mit Java Sep 22, 2023 am 08:49 AM

So entwickeln Sie mit Java ein Single-Sign-On-System basierend auf SpringSecuritySAML. Einführung: Mit der rasanten Entwicklung des Internets werden immer mehr Anwendungen entwickelt. In diesen Anwendungen ist die Benutzeranmeldung eine der häufigsten Funktionen. Bei Anwendungen auf Unternehmensebene müssen sich Benutzer jedoch bei mehreren Systemen anmelden, was zu einer sehr schlechten Benutzeranmeldeerfahrung führt. Um dieses Problem zu lösen, wurde das Single-Sign-On-System (SingleSign-On, kurz SSO) entwickelt. einfach

GO-Zugriffstoken authentifizieren (Keycloak) GO-Zugriffstoken authentifizieren (Keycloak) Feb 09, 2024 am 09:30 AM

Ich versuche, die Zugriffstoken-Validierung mit GO zu implementieren. Aber die Beispiele, die ich online gesehen habe, scheinen nur TOKEN_SECRET zu verwenden, um es zu überprüfen. Aber ich bin es gewohnt, in Javaspring zu programmieren und muss TOKEN_SECRET nicht verwenden. Ich stelle einfach den jwk-set-uri bereit und er prüft die Gültigkeit (automatische Sicherheitsfilter usw.) und ich weiß, dass er 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://localh

Nutzungshandbuch für das Spring Security-Berechtigungskontroll-Framework Nutzungshandbuch für das Spring Security-Berechtigungskontroll-Framework Feb 18, 2024 pm 05:00 PM

In Back-End-Managementsystemen ist in der Regel eine Zugriffsberechtigungskontrolle erforderlich, um den Zugriff verschiedener Benutzer auf Schnittstellen einzuschränken. Fehlen einem Benutzer bestimmte Berechtigungen, kann er auf bestimmte Schnittstellen nicht zugreifen. In diesem Artikel wird das Waynboot-Mall-Projekt als Beispiel verwendet, um vorzustellen, wie gängige Back-End-Verwaltungssysteme das Berechtigungskontroll-Framework SpringSecurity einführen. Die Gliederung lautet wie folgt: waynboot-mall-Projektadresse: https://github.com/wayn111/waynboot-mall 1. Was ist SpringSecurity? SpringSecurity ist ein Open-Source-Projekt, das auf dem Spring-Framework basiert und darauf abzielt, leistungsstarke und flexible Sicherheit bereitzustellen für Java-Anwendungen.

So entwickeln Sie mit Java ein Single-Sign-On-System basierend auf Spring Security OAuth2 So entwickeln Sie mit Java ein Single-Sign-On-System basierend auf Spring Security OAuth2 Sep 20, 2023 pm 01:06 PM

So verwenden Sie Java, um ein Single-Sign-On-System basierend auf SpringSecurityOAuth2 zu entwickeln. Einführung: Mit der rasanten Entwicklung des Internets erfordern immer mehr Websites und Anwendungen, dass sich Benutzer anmelden, aber Benutzer möchten sich nicht für jede Website oder Anwendung merken. Eine Kontonummer und ein Passwort. Das Single-Sign-On-System (SingleSign-On, kurz SSO) kann dieses Problem lösen, indem es Benutzern den Zugriff auf mehrere Websites und Anwendungen ohne wiederholte Authentifizierung nach einmaliger Anmeldung ermöglicht. In diesem Artikel wird vorgestellt

Das Java RESTful API-Kochbuch: Den perfekten Service für jede Anwendung erstellen Das Java RESTful API-Kochbuch: Den perfekten Service für jede Anwendung erstellen Mar 27, 2024 pm 12:11 PM

Einführung In der heutigen vernetzten Welt sind RESTful-APIs zu einem Schlüsselmechanismus für die Kommunikation zwischen Anwendungen geworden. Mit Java, einer leistungsstarken Programmiersprache, können Sie effiziente, skalierbare und gut verwaltete RESTful-APIs erstellen. Kapitel 1: RESTfulAPI-Grundlagen, Prinzipien und Best Practices der RESTful-Architektur HTTP-Methoden, Statuscodes und Antwortheader Datenformate wie JSON und XML Kapitel 2: Design und Modellierung RESTfulAPI RESTfulAPI-Designprinzipien Ressourcenmodellierung und URI-Design Versionskontrolle und HATEOAS Kapitel 3: Verwendung SpringBoot zum Erstellen einer RESTful-API SpringBoot-Einführung und erste Schritte beim Erstellen und

Spring Security ruft Benutzerinformationen für authentifizierte und nicht authentifizierte Benutzer in den verbleibenden Diensten ab Spring Security ruft Benutzerinformationen für authentifizierte und nicht authentifizierte Benutzer in den verbleibenden Diensten ab Feb 08, 2024 pm 11:00 PM

Ich habe einen Springrest-Dienst und möchte ihn sowohl für authentifizierte als auch für nicht authentifizierte Benutzer verwenden. Wenn der Benutzer authentifiziert ist, möchte ich die Benutzerinformationen von securitycontextholder.getcontext().getauthentication() abrufen. Wenn ich .antmatchers("/app/rest/question/useroperation/list/**").permitall() in der ouath2-Konfiguration wie unten gezeigt verwende, kann ich die Benutzerinformationen des authentifizierten Benutzers abrufen, nicht jedoch der authentifizierten Benutzer erscheint 40

Wie interagieren das Vue-Framework und das Springboot-Framework mit dem Front-End und dem Back-End? Wie interagieren das Vue-Framework und das Springboot-Framework mit dem Front-End und dem Back-End? Apr 06, 2024 am 01:51 AM

Vue.js und Spring Boot interagieren über: RESTful API: Vue.js verwendet Axios, um asynchrone HTTP-Anfragen zu senden, und Spring Boot bietet eine RESTful API-Implementierung. Datenweitergabe: Daten werden über Anfragen und Antworten weitergegeben, beispielsweise über den Anfragetext oder Abfrageparameter. Anforderungsmethode: Zur Angabe der Operation werden HTTP-Anforderungsmethoden wie GET, POST, PUT und DELETE verwendet. Routing: Die Spring Boot @RequestMapping-Annotation definiert das Controller-Routing, und Vue.js verwendet Vue Router, um das Schnittstellen-Routing zu definieren. Staatsverwaltung: Vu

See all articles