Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengesahkan Tandatangan JWT Menggunakan JWK dalam Go?

Bagaimana untuk Mengesahkan Tandatangan JWT Menggunakan JWK dalam Go?

Linda Hamilton
Lepaskan: 2024-12-28 17:00:12
asal
949 orang telah melayarinya

How to Verify JWT Signatures Using JWKs in Go?

Bagaimana hendak mengesahkan tandatangan JWT dengan JWK dalam Go?

Satu cabaran mengesahkan JWT ialah mengesahkan tandatangan. Ini benar terutamanya dengan JWK dan bahasa Go.

Masalahnya

Penyahkod membenarkan kami menghuraikan JWT. Walau bagaimanapun, mengesahkan tandatangan, terutamanya dengan JWK, menawarkan cabaran yang berbeza. Berikut ialah contoh ralat biasa:

type myClaims struct {
    jwt.StandardClaims
}

func main() {
    claims := &myClaims{}

    _, err := jwt.ParseWithClaims("ey...", claims, getKey)
    if err != nil {
        log.Fatal(err)
    }
}
Salin selepas log masuk

Ralat: Kunci "kanak-kanak" tidak ditemui dalam token

Penyelesaian

Untuk menyelesaikan masalah ini , kami mesti menyediakan Keyfunc yang mendapatkan semula kunci awam. Kod berikut menunjukkan penyelesaian:

const jwksURL = "https://companyx.okta.com/oauth2/v1/keys"

func getKey(token *jwt.Token) (interface{}, error) {
    // TODO: Cache the response to avoid repeated HTTP requests
    set, err := jwk.FetchHTTP(jwksURL)
    if err != nil {
        return nil, err
    }
    keyID, ok := token.Header["kid"].(string)
    if !ok {
        return nil, errors.New("expecting JWT header to have string kid")
    }
    if key := set.LookupKeyID(keyID); len(key) == 1 {
        return key[0].Materialize()
    }
    return nil, fmt.Errorf("unable to find key %q", keyID)
}
Salin selepas log masuk

Fungsi getKey ini:

  1. Mengambil kunci awam daripada URL yang disediakan.
  2. Mengambil ID kunci daripada Pengepala JWT.
  3. Mencari kunci menggunakan kekunci ID.
  4. Membuat kunci menjadi antara muka yang boleh digunakan oleh jwt-go untuk pengesahan.

Dengan menyediakan fungsi getKey ini, anda boleh mengesahkan tandatangan JWT dengan jayanya menggunakan JWK dalam Go.

Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan Tandatangan JWT Menggunakan JWK dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan