Pengesahan identiti perkhidmatan mikro dan sistem kebenaran yang dibina menggunakan bahasa Go
Dengan peningkatan seni bina perkhidmatan mikro, pengesahan identiti dan sistem kebenaran telah menjadi bahagian yang amat diperlukan dalam membina aplikasi yang diedarkan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa Go untuk membina sistem pengesahan dan kebenaran perkhidmatan mikro yang ringkas tetapi berkuasa, dan melampirkan contoh kod.
Pertama, kita perlu menentukan kaedah pengesahan identiti. Dalam seni bina perkhidmatan mikro, kaedah pengesahan identiti biasa termasuk pengesahan berasaskan token dan pengesahan berasaskan JWT (JSON Web Token). Dalam contoh ini, kami akan menggunakan pengesahan berasaskan JWT.
Untuk menjana dan mengesahkan JWT, kami boleh menggunakan perpustakaan pihak ketiga dalam bahasa Go. Di sini, kami memilih untuk menggunakan perpustakaan github.com/dgrijalva/jwt-go.
Pertama, kami perlu mengimport perpustakaan ini dalam program Go kami:
import ( "github.com/dgrijalva/jwt-go" )
Seterusnya, kami perlu menentukan kunci untuk menandatangani JWT. Kunci ini mestilah rentetan rawak yang digunakan untuk memastikan keselamatan JWT. Dalam aplikasi praktikal, kita boleh menyimpan kunci dalam pembolehubah persekitaran untuk meningkatkan keselamatan.
var signingKey = []byte("ThisIsASecretKey")
Kemudian, kita perlu menentukan struktur untuk mewakili maklumat identiti pengguna. Dalam contoh ini, kami hanya menyimpan ID pengguna dan maklumat peranan. Berdasarkan keperluan sebenar, kita boleh menambah lebih banyak medan mengikut keperluan.
type User struct { ID int64 `json:"id"` Role string `json:"role"` }
Seterusnya, kita perlu melaksanakan fungsi untuk menjana JWT. Fungsi ini menerima objek pengguna sebagai parameter dan mengembalikan rentetan JWT baharu.
func GenerateToken(user User) (string, error) { claims := jwt.MapClaims{ "id": user.ID, "role": user.Role, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString(signingKey) }
Kemudian, kita perlu melaksanakan fungsi untuk mengesahkan JWT. Fungsi ini menerima rentetan JWT sebagai parameter dan mengembalikan objek pengguna yang dihuraikan.
func ValidateToken(tokenString string) (User, error) { token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return signingKey, nil }) if err != nil { return User{}, err } if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { return User{ ID: int64(claims["id"].(float64)), Role: claims["role"].(string), }, nil } return User{}, errors.New("Invalid token") }
Akhir sekali, kami boleh menggunakan fungsi ini dalam perkhidmatan mikro kami untuk pengesahan dan kebenaran. Apabila pengguna log masuk, kita boleh menjana JWT dan mengembalikannya kepada pengguna. Apabila pengguna membuat permintaan, kami boleh mengesahkan JWT dan menyemak maklumat peranan pengguna untuk menentukan sama ada mereka mempunyai akses.
func LoginHandler(w http.ResponseWriter, r *http.Request) { // 验证用户身份... // 生成JWT token, _ := GenerateToken(user) // 将JWT返回给用户 w.Write([]byte(token)) } func SecureHandler(w http.ResponseWriter, r *http.Request) { // 验证JWT tokenString := r.Header.Get("Authorization") user, err := ValidateToken(tokenString) if err != nil { w.WriteHeader(http.StatusUnauthorized) w.Write([]byte("Unauthorized")) return } // 检查用户角色... // 处理请求... w.Write([]byte("Authorized")) }
Melalui contoh di atas, kita dapat melihat cara menggunakan bahasa Go untuk membina sistem pengesahan dan kebenaran perkhidmatan mikro yang ringkas tetapi berkuasa. Sudah tentu, dalam aplikasi sebenar, kami mungkin perlu menambah lebih banyak ciri, seperti token muat semula, log masuk tunggal, dsb. Tetapi sama ada ia adalah senario aplikasi yang mudah atau kompleks, fungsi berkuasa bahasa Go dan perpustakaan pihak ketiga yang kaya boleh menyokong kami dalam membina sistem pengesahan dan kebenaran identiti yang selamat dan boleh dipercayai.
Atas ialah kandungan terperinci Sistem pengesahan identiti dan kebenaran mikroperkhidmatan dibina menggunakan bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!