


Token JWT di Golang: Panduan Pembangun untuk Selamatkan API
Pengenalan
Dalam pembangunan web moden, pengesahan yang selamat dan berskala adalah penting. Token Web JSON (JWT) telah menjadi cara standard untuk mencapai matlamat ini. Dalam catatan blog ini, kami akan meneroka apa itu JWT, cara ia berfungsi dan cara melaksanakannya di Golang.
Apakah itu JWT?
JSON Web Token (JWT) ialah cara padat, selamat URL untuk mewakili tuntutan untuk menghantar tuntutan dengan selamat antara dua pihak. Ia biasanya digunakan untuk mengesahkan dan membenarkan pengguna dalam API dan sistem teragih.
Struktur JWT
JWT terdiri daripada tiga bahagian yang dipisahkan oleh titik (.):
<code>Header.Payload.Signature</code>
Contoh:
<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.reGQzG3OKdoIMWLDKOZ4TICJit3EW69cQE72E2CfzRE</code>
Setiap bahagian ialah:
- Tajuk: Menentukan jenis token (JWT) dan algoritma tandatangan (HS256).
<code>{ "alg": "HS256", "typ": "JWT" }</code>
- Muat bayar: Mengandungi tuntutan (data pengguna seperti ID, peranan atau nama).
<code>{ "sub": "1234567890", "name": "John Doe", "admin": true, "iat": 1516239022 }</code>
- Tandatangan: Menggunakan proses tandatangan kriptografi untuk memastikan integriti token. Mari kita terokai ini secara terperinci.
Cara membuat tandatangan:
- Sambungkan Pengepala dan Muatan yang dikodkan:
<code> base64UrlEncode(header) + "." + base64UrlEncode(payload)</code>Salin selepas log masuk
- Tandatangan keputusan:
- Gunakan algoritma tandatangan kriptografi (cth., HMACSHA256, RS256) menggunakan kunci rahsia atau kunci peribadi.
- Tandatangan tambahan: JWT akhir menjadi
<code> header.payload.signature</code>Salin selepas log masuk
Cara JWT berfungsi
- Pelanggan menghantar bukti kelayakan log masuk ke pelayan.
- Jika sah, pelayan akan menjana JWT dan mengembalikannya kepada pelanggan.
- Pelanggan menyimpan JWT (cth. dalam localStorage atau kuki).
- Untuk setiap permintaan, pelanggan memasukkan JWT dalam pengepala Kebenaran: Kebenaran: Pembawa
- Pelayan mengesahkan JWT pada setiap permintaan.
- Kira semula tandatangan menggunakan Pengepala dan Muatan yang diterima.
- Bandingkan tandatangan yang dikira semula dengan tandatangan yang diterima.
Melaksanakan JWT di Golang
Pemaju Golang boleh memanfaatkan perpustakaan golang-jwt/jwt yang sangat baik untuk mengendalikan JWT. Pustaka ini menyediakan fungsi yang berkuasa untuk mencipta, menandatangani dan mengesahkan JWT. Anda boleh mendapatkannya di sini.
Walau bagaimanapun, mengurus JWT selalunya memerlukan tugas berulang seperti mengkonfigurasi kaedah menandatangani, menghuraikan token dan mengesahkan tuntutan. Untuk memudahkan ini, saya menulis pakej tersuai untuk membungkus fungsi golang-jwt. Anda boleh melihat pakej saya di sini. Berikut ialah contoh cara menggunakan pakej JWT tersuai saya.
package main import ( "context" "fmt" "log" "time" "github.com/golang-jwt/jwt/v5" jwtutil "github.com/kittipat1413/go-common/util/jwt" ) type MyCustomClaims struct { jwt.RegisteredClaims UserID string `json:"uid"` } func main() { ctx := context.Background() signingKey := []byte("super-secret-key") manager, err := jwtutil.NewJWTManager(jwtutil.HS256, signingKey) if err != nil { log.Fatalf("Failed to create JWTManager: %v", err) } // Prepare custom claims claims := &MyCustomClaims{ RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)), Issuer: "example-HS256", Subject: "example-subject", }, UserID: "abc123", } // Create the token tokenStringHS256, err := manager.CreateToken(ctx, claims) if err != nil { log.Fatalf("Failed to create token: %v", err) } fmt.Println("Generated Token:", tokenStringHS256) // Validate the token parsedClaims := &MyCustomClaims{} err = manager.ParseAndValidateToken(ctx, tokenStringHS256, parsedClaims) if err != nil { log.Fatalf("Failed to validate token: %v", err) } fmt.Printf("Token is valid! UserID: %s, Issuer: %s\n", parsedClaims.UserID, parsedClaims.Issuer) }
Amalan Terbaik JWT
- Gunakan HTTPS: Sentiasa pindahkan token melalui saluran selamat.
- Tetapkan masa tamat tempoh: Sertakan exp yang munasabah untuk mengehadkan penyalahgunaan token.
- Lindungi kunci anda: Simpan kunci anda dengan selamat menggunakan pembolehubah persekitaran atau pengurus kunci.
- Elakkan menggunakan data sensitif dalam muatan: Sertakan hanya maklumat tidak kritikal.
- Gunakan token muat semula: Gandingkan JWT dengan token muat semula untuk melanjutkan sesi dengan selamat.
Kesimpulan ?
JWT ialah alat yang berkuasa untuk pengesahan yang selamat dan tanpa kewarganegaraan. Tandatangan itu memastikan integriti dan ketulenan token, menjadikan JWT sesuai untuk API dan sistem teragih. Menggunakan perpustakaan seperti jwt-go anda boleh melaksanakan JWT dengan mudah dalam projek Golang anda.
☕ Sokong kerja saya ☕
Jika anda suka kerja saya, sila pertimbangkan untuk membeli saya kopi! Sokongan anda membantu saya terus mencipta kandungan berharga dan berkongsi pengetahuan. ☕
Atas ialah kandungan terperinci Token JWT di Golang: Panduan Pembangun untuk Selamatkan API. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Golang lebih baik daripada Python dari segi prestasi dan skalabiliti. 1) Ciri-ciri jenis kompilasi Golang dan model konkurensi yang cekap menjadikannya berfungsi dengan baik dalam senario konvensional yang tinggi. 2) Python, sebagai bahasa yang ditafsirkan, melaksanakan perlahan -lahan, tetapi dapat mengoptimumkan prestasi melalui alat seperti Cython.

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

GoisidealforbeginnersandSuekableforcloudandnetworkservicesduetoitssimplicity, kecekapan, danconcurrencyfeatures.1) installgofromtheofficialwebsiteandverifywith'goversion'.2)

Golang sesuai untuk pembangunan pesat dan senario serentak, dan C sesuai untuk senario di mana prestasi ekstrem dan kawalan peringkat rendah diperlukan. 1) Golang meningkatkan prestasi melalui pengumpulan sampah dan mekanisme konvensional, dan sesuai untuk pembangunan perkhidmatan web yang tinggi. 2) C mencapai prestasi muktamad melalui pengurusan memori manual dan pengoptimuman pengkompil, dan sesuai untuk pembangunan sistem tertanam.

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.

Golang dan C masing-masing mempunyai kelebihan sendiri dalam pertandingan prestasi: 1) Golang sesuai untuk kesesuaian tinggi dan perkembangan pesat, dan 2) C menyediakan prestasi yang lebih tinggi dan kawalan halus. Pemilihan harus berdasarkan keperluan projek dan tumpukan teknologi pasukan.

Golangisidealforbuildingscalablesystemsduetoitseficiencyandcurrency, whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.golang'sdesignencouragescouragescouragescouragescourageSlean, readablecodeanditsouragescouragescourscean,
