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>
- 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>
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) }Anda boleh menyemak imbas pelaksanaan penuh dan dokumentasi pakej saya di GitHub: di sini.
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!

TheBytespackageingoisessentialFormanipulatingByteslicesfectively.1) usebytes.jointoconcatenateslices.2) peworkbytes.bufferfordynamicdataconstruction.3) UtilizeindexandContainsForsearching.4)

TouseThe "pengekodan/binari" pakejingoforencodinganddecodingbinarydata, ikutiThesesteps: 1) importThePackageandCreateabuffer.2) usebinary.writetoencodedatainaintotheBuffer, dinyatakan

Pakej pengekodan/binari menyediakan cara bersatu untuk memproses data binari. 1) Gunakan binary.write dan binari. Baca fungsi untuk mengodkan dan menyahkod pelbagai jenis data seperti integer dan nombor titik terapung. 2) Jenis tersuai boleh dikendalikan dengan melaksanakan antara muka binari.Byteorder. 3) Perhatikan pemilihan endianness, penjajaran data dan pengendalian ralat untuk memastikan ketepatan dan kecekapan data.

Pakej String Go tidak sesuai untuk semua kes penggunaan. Ia berfungsi untuk operasi rentetan yang paling biasa, tetapi perpustakaan pihak ketiga mungkin diperlukan untuk tugas NLP yang kompleks, pemadanan ekspresi biasa, dan parsing format tertentu.

Pakej Strings di GO mempunyai batasan penggunaan dan memori apabila mengendalikan sejumlah besar operasi rentetan. 1) Isu Prestasi: Sebagai contoh, Strings.Replace dan Strings.ReplaceAll kurang cekap apabila berurusan dengan penggantian rentetan berskala besar. 2) Penggunaan memori: Oleh kerana rentetan tidak berubah, objek baru akan dihasilkan setiap operasi, mengakibatkan peningkatan penggunaan memori. 3) Pemprosesan Unicode: Ia tidak cukup fleksibel apabila mengendalikan peraturan Unicode yang kompleks, dan mungkin memerlukan bantuan pakej atau perpustakaan lain.

Menguasai pakej Strings dalam bahasa Go dapat meningkatkan keupayaan pemprosesan teks dan kecekapan pembangunan. 1) Gunakan fungsi mengandungi untuk memeriksa substrings, 2) Gunakan fungsi indeks untuk mencari kedudukan substring, 3) Sertai fungsi rentetan rentetan splice dengan cekap, 4) Gantikan fungsi untuk menggantikan substrings. Berhati -hati untuk mengelakkan kesilapan biasa, seperti tidak memeriksa rentetan kosong dan isu prestasi operasi rentetan yang besar.

Anda harus mengambil berat tentang pakej Strings di GO kerana ia dapat memudahkan manipulasi rentetan dan membuat kod lebih jelas dan lebih efisien. 1) Gunakan rentetan.join untuk rentetan splice yang cekap; 2) Gunakan rentetan.fields untuk membahagikan rentetan oleh aksara kosong; 3) Cari kedudukan substring melalui strings.index dan strings.lastindex; 4) Gunakan string.replaceall untuk menggantikan rentetan; 5) Gunakan string.builder untuk rentetan splice yang cekap; 6) Sentiasa sahkan input untuk mengelakkan hasil yang tidak dijangka.

ThestringspackageingoisessentialforefficientstringManipulation.1) itofferssimpleyetpowerfunchunctionsfortaskslikecheckingsubstringsandjoiningstrings.2) ithandlesunicodewell, withfalliktionslikestrings


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

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan
