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
Linda Hamiltonasal
2024-12-28 17:00:12954semak imbas

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)
    }
}

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)
}

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!

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