Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan pengaturcaraan pelayan bahasa: menggunakan JWT untuk melindungi antara muka API

Amalan pengaturcaraan pelayan bahasa: menggunakan JWT untuk melindungi antara muka API

WBOY
WBOYasal
2023-06-18 16:55:281066semak imbas

Dalam era Internet hari ini, dengan populariti aplikasi Web, API (Antara Muka Pengaturcaraan Aplikasi, Antara Muka Pengaturcaraan Aplikasi) menjadi semakin prihatin dan dipercayai oleh pembangun. Dan melindungi keselamatan antara muka API adalah isu yang sangat penting. Artikel ini akan mengambil bahasa Go sebagai contoh untuk memperkenalkan cara menggunakan JWT (JSON Web Token) untuk melindungi keselamatan antara muka API.

1. Apakah itu JWT

Nama penuh JWT ialah JSON Web Token, yang merupakan standard terbuka (RFC 7519) yang digunakan untuk menghantar maklumat selamat antara pihak. JWT boleh mengesahkan, membenarkan dan bertukar maklumat. JWT biasanya digunakan untuk menghantar maklumat pengesahan dalam aplikasi web atau API.

Dalam JWT, ia terdiri daripada tiga bahagian: pengepala, muatan dan tandatangan.

  1. Pengepala

Pengepala biasanya terdiri daripada dua bahagian: jenis token (iaitu JWT) dan nama algoritma (cth. HMAC SHA256 atau RSA).

{
"alg": "HS256",
"taip": "JWT"
}

  1. Muat bayar

Muatan mengandungi beberapa maklumat yang boleh dipercayai dan berguna, seperti ID pengguna atau hak akses. Tuntutan tersuai boleh ditambah pada muatan (adalah disyorkan untuk hanya menggunakan nama tuntutan berdaftar).

{
"sub": "1234567890",
"nama": "John Doe",
"iat": 1516239022
}

  1. Tandatangan

Untuk mengesahkan sama ada JWT adalah sahih dan sah, JWT perlu ditandatangani menggunakan kekunci dan algoritma yang dinyatakan dalam pengepala.

HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(muatan),
your-256-bit-rahsia
)

2. Gunakan JWT untuk melindungi antara muka API

  1. Pasang kebergantungan JWT

Mula-mula anda perlu memasang pakej kebergantungan JWT bagi bahasa Go:

pergi dapatkan github .com/dgrijalva/ jwt-go

  1. Penjanaan dan pengesahan JWT

Apabila menggunakan JWT untuk melindungi antara muka API, anda perlu menjana dan mengesahkan JWT. Berikut ialah kod contoh mudah untuk menjana dan mengesahkan JWT:

Jana JWT

func GenerateToken(rentetan userid) (rentetan, ralat) {

token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    "userid": userid,
    "exp":   time.Now().Add(time.Hour * 24 * 7).Unix(), //有效期一周
})
tokenString, err := token.SignedString([]byte("mysecretkey"))
if err != nil {
    return "", err
}
return tokenString, nil

}

Sahkan JWT

func ValidateToken(rentetan tokenString) (bool, rentetan) {

token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    return []byte("mysecretkey"), nil
})
if err == nil && token.Valid {
    claims := token.Claims.(jwt.MapClaims)
    userid := claims["userid"].(string) //取出userid
    return true, userid
} else {
    return false, ""
}

}

  1. Gunakan mekanisme pengesahan JWT dalam antara muka API

Dalam antara muka API, anda perlu membaca JWT daripada permintaan HTTP terlebih dahulu dan mengesahkannya. Jika pengesahan lulus, akses kepada antara muka API dibenarkan, jika tidak, ralat 403 (tiada kebenaran) dikembalikan.

Berikut ialah contoh kod:

func myAPIHandler(w http.ResponseWriter, r *http.Request) {

tokenString := r.Header.Get("Authorization") //从HTTP请求中获取JWT
if tokenString == "" {
    w.WriteHeader(http.StatusForbidden)
    return
}
tokenString = strings.TrimPrefix(tokenString, "Bearer ")
ok, userid := ValidateToken(tokenString) //校验JWT
if !ok {
    w.WriteHeader(http.StatusForbidden)
    return
}
// 对于登录用户,可以从JWT中获取用户信息(例如userid),并进行权限控制
// ...
// 处理API请求
// ...

}

3. Ringkasan

Menggunakan JWT boleh melindungi keselamatan antara muka API dengan berkesan dan memastikan bahawa hanya pengguna yang dibenarkan boleh mengakses antara muka API. Dalam bahasa Go, menggunakan JWT juga sangat mudah Anda hanya perlu memasang pakej pergantungan dan menulis kod yang sepadan. Pada masa yang sama, untuk melindungi keselamatan antara muka API, langkah keselamatan lain juga diperlukan, seperti penyulitan HTTPS, tetapan firewall, pemantauan log, dsb.

Atas ialah kandungan terperinci Amalan pengaturcaraan pelayan bahasa: menggunakan JWT untuk melindungi antara muka 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