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:
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!