Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Sistem pengesahan identiti dan kebenaran mikroperkhidmatan dibina menggunakan bahasa Go

Sistem pengesahan identiti dan kebenaran mikroperkhidmatan dibina menggunakan bahasa Go

王林
王林asal
2023-08-10 17:43:461358semak imbas

Sistem pengesahan identiti dan kebenaran mikroperkhidmatan dibina menggunakan bahasa Go

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!

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