Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang GO sahkan token akses (kunci kunci)

GO sahkan token akses (kunci kunci)

Feb 09, 2024 am 09:30 AM
spring security

GO 验证访问令牌(keycloak)

Dalam aplikasi rangkaian moden, keselamatan adalah penting. Untuk melindungi data pengguna dan sumber sistem, pengesahan token akses ialah langkah penting. Sebagai penyelesaian pengesahan identiti dan pengurusan akses yang berkuasa, Keycloak menyediakan pembangun kaedah pengesahan yang mudah dan selamat. Dalam artikel ini, editor PHP Xigua akan memperkenalkan cara menggunakan Keycloak untuk mengesahkan token akses untuk memastikan keselamatan aplikasi. Dengan panduan artikel ini, anda akan dapat melaksanakan pengesahan token akses dengan mudah dan memastikan bahawa hanya pengguna yang dibenarkan boleh mengakses aplikasi anda.

Kandungan soalan

Saya cuba melaksanakan pengesahan token akses menggunakan GO. Tetapi contoh yang saya lihat dalam talian nampaknya hanya menggunakan TOKEN_SECRET untuk mengesahkannya. Tetapi saya sudah biasa dengan pengaturcaraan dalam Java spring dan tidak perlu menggunakan TOKEN_SECRET. Saya hanya menyediakan jwk-set-uri dan ia menyemak kesahihan (auto - penapis keselamatan dll) dan saya tahu ia bercakap dengan pelayan oauth dan melakukan pengesahan ini.

Adakah tiada perpustakaan dalam Go yang boleh menyemak sama ada token itu sah dengan membuat permintaan kepada pelayan oauth?

Saya tahu saya boleh melakukan ini secara manual dengan membuat permintaan ke titik akhir info pengguna pelayan oauth:

http://localhost:8080/auth/realms/<your_realm>/protocol/openid-connect/userinfo
Salin selepas log masuk

(sertakan token dalam pengepala dengan kebenaran kunci)

Tetapi saya tidak tahu sama ada ini memenuhi kriteria sepenuhnya.

Apakah pendekatan yang betul?

Penyelesaian

Jawapan ringkas: Gunakan go-oidc

Jawapan panjang: Mula-mula, mari kita fahami cara Spring Security mengesahkan token akses JWT secara automatik. Mengikut konvensyen, jika anda berada di application.yaml 配置文件中定义 OAuth 2.0 或 OIDC 客户端属性,Spring 将自动在安全过滤器链中连接一个过滤器,从 Keycloak 中获取 jwk-set, Keycloak ialah satu set kunci awam yang sepadan dengan kunci yang digunakan Keycloak untuk menandatangani token. Penapis akan digunakan pada semua laluan yang dilindungi dan musim bunga akan menggunakan kunci awam untuk menyemak sama ada tandatangan token itu sah dan melakukan semakan lain jika berkenaan (khalayak, tamat masa, dll...)

Jadi bagaimana kita melakukan ini dalam Go? Kita boleh menulis middleware mudah yang menerima sama ada masa pernyataan jwk-set 并使用它来验证令牌。您需要检查 alg 声明以查看使用了哪种签名算法,从 jwk-set 中选择相应的公钥并检查签名是否有效。然后,解码令牌,确认 isssub 声明,以确保它来自受信任的颁发者并面向目标受众,并检查它是否尚未过期。检查 nbf (不早于)和 iat (diterbitkan pada) adalah betul. Akhir sekali, maklumat berkaitan daripada token disuntik ke dalam konteks permintaan jika diperlukan di hiliran.

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)
        })
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci GO sahkan token akses (kunci kunci). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Spring Security 6: cors() ditamatkan dan ditandakan untuk dialih keluar Spring Security 6: cors() ditamatkan dan ditandakan untuk dialih keluar Feb 10, 2024 pm 11:45 PM

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

Cara membangunkan sistem log masuk tunggal berasaskan SAML Spring Security menggunakan Java Cara membangunkan sistem log masuk tunggal berasaskan SAML Spring Security menggunakan Java Sep 22, 2023 am 08:49 AM

Cara menggunakan Java untuk membangunkan sistem log masuk tunggal berdasarkan SpringSecuritySAML Pengenalan: Dengan perkembangan pesat Internet, semakin banyak aplikasi dibangunkan. Dalam aplikasi ini, log masuk pengguna adalah salah satu ciri yang paling biasa. Walau bagaimanapun, untuk aplikasi peringkat perusahaan, pengguna perlu log masuk dalam berbilang sistem, yang akan membawa kepada pengalaman log masuk pengguna yang sangat lemah. Untuk menyelesaikan masalah ini, sistem log masuk tunggal (SingleSign-On, dirujuk sebagai SSO) telah wujud. ringkas

GO sahkan token akses (kunci kunci) GO sahkan token akses (kunci kunci) Feb 09, 2024 am 09:30 AM

Saya cuba melaksanakan pengesahan token akses menggunakan GO. Tetapi contoh yang saya lihat dalam talian nampaknya hanya menggunakan TOKEN_SECRET untuk mengesahkannya. Tetapi saya sudah biasa dengan pengaturcaraan dalam Javaspring dan tidak perlu menggunakan TOKEN_SECRET. Saya hanya menyediakan jwk-set-uri dan ia menyemak kesahihan (penapis keselamatan automatik dsb.) dan saya tahu ia bercakap dengan pelayan oauth dan melakukan pengesahan ini. Adakah tiada perpustakaan dalam Go untuk menyemak sama ada token itu sah dengan membuat permintaan kepada pelayan oauth? Saya tahu saya tahu saya boleh melakukan ini secara manual dengan membuat permintaan ke titik akhir info pengguna pelayan oauth: http://localh

Panduan penggunaan rangka kerja kawalan kebenaran Spring Security Panduan penggunaan rangka kerja kawalan kebenaran Spring Security Feb 18, 2024 pm 05:00 PM

Dalam sistem pengurusan bahagian belakang, kawalan kebenaran akses biasanya diperlukan untuk mengehadkan keupayaan pengguna yang berbeza untuk mengakses antara muka. Jika pengguna tidak mempunyai kebenaran khusus, dia tidak boleh mengakses antara muka tertentu. Artikel ini akan menggunakan projek waynboot-mall sebagai contoh untuk memperkenalkan cara memperkenalkan rangka kerja kawalan kebenaran SpringSecurity ke dalam sistem pengurusan back-end biasa. Garis besarnya adalah seperti berikut: alamat projek waynboot-mall: https://github.com/wayn111/waynboot-mall 1. Apakah SpringSecurity SpringSecurity ialah projek sumber terbuka berdasarkan rangka kerja Spring, bertujuan untuk menyediakan keselamatan yang berkuasa dan fleksibel untuk aplikasi Java.

Cara menggunakan Java untuk membangunkan sistem log masuk tunggal berdasarkan Spring Security OAuth2 Cara menggunakan Java untuk membangunkan sistem log masuk tunggal berdasarkan Spring Security OAuth2 Sep 20, 2023 pm 01:06 PM

Cara menggunakan Java untuk membangunkan sistem log masuk tunggal berdasarkan SpringSecurityOAuth2 Pengenalan: Dengan perkembangan pesat Internet, semakin banyak laman web dan aplikasi memerlukan pengguna untuk log masuk, tetapi pengguna tidak mahu mengingati setiap laman web atau aplikasi. Nombor akaun dan kata laluan. Sistem log masuk tunggal (SingleSign-On, dirujuk sebagai SSO) boleh menyelesaikan masalah ini, membenarkan pengguna mengakses berbilang tapak web dan aplikasi tanpa pengesahan berulang selepas log masuk sekali. Artikel ini akan memperkenalkan

Buku masakan Java RESTful API: Membina perkhidmatan yang sempurna untuk setiap aplikasi Buku masakan Java RESTful API: Membina perkhidmatan yang sempurna untuk setiap aplikasi Mar 27, 2024 pm 12:11 PM

Pengenalan Dalam dunia yang saling berkaitan hari ini, API RESTful telah menjadi mekanisme utama untuk komunikasi antara aplikasi. Dengan Java, bahasa pengaturcaraan yang berkuasa, anda boleh membina API RESTful yang cekap, berskala dan diselenggara dengan baik. Bab 1: Prinsip Asas RESTfulAPI dan Amalan Terbaik Seni Bina RESTful Kaedah Http, kod status dan pengepala respons Format data seperti JSON dan XML Bab 2: Reka Bentuk dan Pemodelan RESTfulAPI RESTfulAPI Prinsip Reka Bentuk Pemodelan Sumber dan Kawalan Versi Reka Bentuk URI dan HATEOAS Bab 3: Menggunakan SpringBoot untuk membina pengenalan SpringBoot API RESTful dan mula membina dan

Spring Security mendapat maklumat pengguna untuk pengguna yang disahkan dan tidak disahkan dalam perkhidmatan yang tinggal Spring Security mendapat maklumat pengguna untuk pengguna yang disahkan dan tidak disahkan dalam perkhidmatan yang tinggal Feb 08, 2024 pm 11:00 PM

Saya mempunyai perkhidmatan springrest dan saya mahu menggunakannya untuk kedua-dua pengguna yang disahkan dan tidak disahkan. Jika pengguna disahkan, saya ingin mendapatkan maklumat pengguna daripada securitycontextholder.getcontext().getauthentication(). Jika saya menggunakan .antmatchers("/app/rest/question/useroperation/list/**").permitall() dalam konfigurasi ouath2 seperti yang ditunjukkan di bawah, maka saya boleh mendapatkan maklumat pengguna pengguna yang disahkan, tetapi bukan Pengguna yang disahkan akan muncul 40

Bagaimanakah rangka kerja vue dan rangka kerja springboot berinteraksi dengan hujung hadapan dan belakang? Bagaimanakah rangka kerja vue dan rangka kerja springboot berinteraksi dengan hujung hadapan dan belakang? Apr 06, 2024 am 01:51 AM

Vue.js dan Spring Boot berinteraksi melalui: RESTful API: Vue.js menggunakan Axios untuk menghantar permintaan HTTP tak segerak dan Spring Boot menyediakan pelaksanaan API RESTful. Penghantaran data: Data dihantar melalui permintaan dan respons, seperti badan permintaan atau parameter pertanyaan. Kaedah permintaan: Kaedah permintaan HTTP seperti GET, POST, PUT dan DELETE digunakan untuk menentukan operasi. Penghalaan: Anotasi Spring Boot @RequestMapping mentakrifkan penghalaan pengawal dan Vue.js menggunakan Penghala Vue untuk mentakrifkan penghalaan antara muka. Pengurusan negeri: Vu

See all articles