Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah JWT menyelesaikan kesahihan dan ralat tuntutan?

Bagaimanakah JWT menyelesaikan kesahihan dan ralat tuntutan?

王林
Lepaskan: 2024-02-06 11:12:03
ke hadapan
498 orang telah melayarinya

JWT 如何解析声明有效性和错误?

Kandungan soalan

Saya sedang mencipta akses, muat semula logik token dan saya ingin menyemak sama ada token akses itu sah (tidak disunting) walaupun ia telah tamat tempoh. Jika token tamat tempoh, Go akan mengembalikan ralat dan membatalkan token. Jadi saya menyemak sama ada ralat yang diberikan sepadan dengan ErrTokenExpired.

Bolehkah saya 100% pasti bahawa jika token itu tidak sah, maka ralatnya tidak akan menjadi sifar supaya saya boleh memadamnya if !tkn.Valid{...?

Adakah ini secara umumnya pendekatan yang baik atau adakah token yang diedit akan lulus pengesahan saya?

func VerifyJWT(jwtString, secret string) (*jwt.Token, *Claims, error) {
    claims := &Claims{}
    tkn, err := jwt.ParseWithClaims(jwtString, claims, func(token *jwt.Token) (interface{}, error) {
        return []byte(os.Getenv(secret)), nil
    })
    return tkn, claims, err
}
Salin selepas log masuk
_, accClaims, err1 := VerifyJWT(req.Access, "ACCESS_SECRET")
    if err1 != nil && err1.Error()[:16] != jwt.ErrTokenExpired.Error()[:16] {
        WriteJSON(w, http.StatusBadRequest, APIError{Error: "invalid token access" + err1.Error()})
        return
    }
Salin selepas log masuk


Jawapan betul


token jwt selamat jika anda mempunyai dua mata dalam kod anda:

1-Pilih algoritma yang baik
2- Buat kunci rawak

Jika token berubah atau tamat tempoh, dua pilihan ini boleh membantu anda, VerifyJWTKembalikan ralat!

Nota: Sentiasa perlu menyemak kesilapan dan mengembalikan respons yang baik kepada pelanggan.

<小时/>

Nota (tingkatkan kod anda): Untuk menyemak sama ada ralat ialah ErrTokenExpired, gunakan errors pkg.

Contoh anda:

// import "errors"


_, accClaims, err := VerifyJWT(req.Access, "ACCESS_SECRET")
if errors.Is(err, jwt.ErrTokenExpired) {
        // continue progress
}

if err != nil {
    WriteJSON(w, http.StatusUnauthorized, APIError{Error: err.Error()})
    return
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah JWT menyelesaikan kesahihan dan ralat tuntutan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan