cari
Rumahpembangunan bahagian belakangGolangToken JWT di Golang: Panduan Pembangun untuk Selamatkan API

JWT Tokens in Golang: A Developer’s Guide to Secure APIs

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:

  1. Tajuk: Menentukan jenis token (JWT) dan algoritma tandatangan (HS256).
<code>{
  "alg": "HS256",
  "typ": "JWT"
}</code>
  1. Muat bayar: Mengandungi tuntutan (data pengguna seperti ID, peranan atau nama).
<code>{
    "sub": "1234567890",
    "name": "John Doe",
    "admin": true,
    "iat": 1516239022
}</code>
  1. 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

  1. Pelanggan menghantar bukti kelayakan log masuk ke pelayan.
  2. Jika sah, pelayan akan menjana JWT dan mengembalikannya kepada pelanggan.
  3. Pelanggan menyimpan JWT (cth. dalam localStorage atau kuki).
  4. Untuk setiap permintaan, pelanggan memasukkan JWT dalam pengepala Kebenaran: Kebenaran: Pembawa
  5. 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

  1. Gunakan HTTPS: Sentiasa pindahkan token melalui saluran selamat.
  2. Tetapkan masa tamat tempoh: Sertakan exp yang munasabah untuk mengehadkan penyalahgunaan token.
  3. Lindungi kunci anda: Simpan kunci anda dengan selamat menggunakan pembolehubah persekitaran atau pengurus kunci.
  4. Elakkan menggunakan data sensitif dalam muatan: Sertakan hanya maklumat tidak kritikal.
  5. 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!

Kenyataan
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
Belajar pergi manipulasi slice byte: Bekerja dengan pakej 'bait'Belajar pergi manipulasi slice byte: Bekerja dengan pakej 'bait'May 16, 2025 am 12:14 AM

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

Cara Menggunakan Pakej 'Pengekodan/PerduaCara Menggunakan Pakej 'Pengekodan/PerduaMay 16, 2025 am 12:14 AM

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

Bagaimana anda menggunakan pakej 'pengekodan/binari' untuk mengodkan dan menyahkod data binari di GO?Bagaimana anda menggunakan pakej 'pengekodan/binari' untuk mengodkan dan menyahkod data binari di GO?May 16, 2025 am 12:13 AM

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 GO Strings: Adakah ia lengkap untuk setiap kes penggunaan?Pakej GO Strings: Adakah ia lengkap untuk setiap kes penggunaan?May 16, 2025 am 12:09 AM

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.

Apakah had pakej rentetan Go?Apakah had pakej rentetan Go?May 16, 2025 am 12:05 AM

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.

Manipulasi String Di GO: Menguasai Pakej 'Strings'Manipulasi String Di GO: Menguasai Pakej 'Strings'May 14, 2025 am 12:19 AM

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.

Pergi 'rentetan' petua pakej dan trikPergi 'rentetan' petua pakej dan trikMay 14, 2025 am 12:18 AM

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.

Pakej 'Strings' di Go: Pergi ke operasi rentetanPakej 'Strings' di Go: Pergi ke operasi rentetanMay 14, 2025 am 12:17 AM

ThestringspackageingoisessentialforefficientstringManipulation.1) itofferssimpleyetpowerfunchunctionsfortaskslikecheckingsubstringsandjoiningstrings.2) ithandlesunicodewell, withfalliktionslikestrings

See all articles

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!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
<🎜> obscur: Ekspedisi 33 - Cara mendapatkan pemangkin Chroma yang sempurna
2 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan