Pembelajaran Golang Pengesahan dan kebenaran pelayan web

PHPz
Lepaskan: 2023-06-24 09:04:05
asal
1180 orang telah melayarinya

Golang ialah bahasa baru muncul, terutamanya sesuai untuk melaksanakan perkhidmatan web. Dalam perkhidmatan Web, pengesahan dan kebenaran adalah mekanisme keselamatan yang sangat penting. Artikel ini akan memperkenalkan cara melaksanakan pengesahan dan kebenaran pelayan Web di Golang.

Pengesahan merujuk kepada mengesahkan identiti pengguna dan menentukan sama ada dia mempunyai hak untuk mengakses sumber. Kaedah pengesahan biasa termasuk nama pengguna dan kata laluan, token, dsb. Keizinan merujuk kepada menentukan sama ada pengguna mempunyai kebenaran untuk mengakses sumber. Biasanya termasuk kaedah kawalan capaian berasaskan peranan dan kaedah kebenaran kawalan capaian berasaskan sumber.

Pelbagai rangka kerja dan perpustakaan boleh digunakan di Golang untuk melaksanakan pengesahan dan kebenaran perkhidmatan web. Artikel ini mengambil rangka kerja Gin sebagai contoh untuk memperkenalkan cara melaksanakan pengesahan berasaskan token dan kebenaran berasaskan peranan.

1. Pengesahan berasaskan Token

Dalam rangka kerja Gin, JWT (Json Web Token) boleh digunakan untuk melaksanakan pengesahan berasaskan token. JWT ialah standard terbuka yang mentakrifkan cara ringkas dan serba lengkap untuk menghantar maklumat dengan selamat melalui web. JWT terdiri daripada tiga bahagian: Pengepala, Muatan dan Tandatangan. Pengepala

digunakan untuk menerangkan jenis token dan algoritma tandatangan, contohnya:

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

Muatan digunakan untuk menyimpan maklumat yang perlu dihantar, seperti nama pengguna, peranan, dsb., contohnya:

{"sub": "123456789", "name": "John Doe", "iat": 1516239022}

Tandatangan digunakan untuk mengelakkan maklumat daripada diganggu dan kunci peribadi perlu digunakan untuk tandatangan, contohnya:

HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

Di Golang, anda boleh menggunakan perpustakaan github.com/dgrijalva/jwt-go untuk mencapai penjanaan JWT dan pengesahan. Sebagai contoh:

// Cipta objek token baharu, nyatakan kaedah menandatangani dan tuntutan yang anda mahukan.
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{

"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
Salin selepas log masuk

})

// Tandatangani dan dapatkan token yang dikodkan lengkap sebagai rentetan menggunakan rahsia
tokenString, err := token.SignedString([]byte("secret"))

// Parse token untuk mengesahkan kesahihannya dan ekstrak tuntutan
token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, func(token *jwt.Token) (antara muka{}, ralat ) {

return []byte("secret"), nil
Salin selepas log masuk

})

Dalam rangka kerja Gin, anda boleh menggunakan perpustakaan gin-jwt untuk membina mekanisme pengesahan berasaskan JWT dengan cepat. Contohnya:

// Cipta perisian tengah JWT baharu dengan kunci tandatangan yang ditentukan
perisian tengah := jwtmiddleware.New(jwtmiddleware.Options{

SigningMethod:   jwt.SigningMethodHS256,
Claims:          &CustomClaims{},
KeyFunc: func(token *jwt.Token) (interface{}, error) {
    // Check the signing method and return the key for verifying the signature
    if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
        return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
    }
    return []byte("secret"), nil
},
Salin selepas log masuk

})

// Gunakan middleware dalam laluan Gin untuk melindungi sumber
router.GET("/protected", middleware.MiddlewareFunc(), func(c *gin.Context) {

claims := jwtmiddleware.ExtractClaims(c)
user := claims["user"].(string)
c.JSON(200, gin.H{
    "user": user,
    "message": "Hello, World!",
})
Salin selepas log masuk

})

2. Keizinan berasaskan peranan

Dalam rangka kerja Gin, kebenaran berasaskan peranan boleh digunakan untuk menyekat akses pengguna kepada sumber. Sebagai contoh, dalam aplikasi blog, peranan digunakan untuk membezakan pengguna biasa dan pentadbir. Pentadbir boleh mengakses semua sumber Blog, manakala pengguna biasa hanya boleh mengakses sumber Blog yang diterbitkan oleh mereka sendiri.

Anda boleh menggunakan perpustakaan gin-authz untuk melaksanakan kebenaran berasaskan peranan. Contohnya:

// Tentukan perisian tengah keizinan untuk menguatkuasakan akses berasaskan peranan
authMiddleware := authz.NewAuthorizer(authz.BuiltinRolebased())

// Tentukan peranan- dasar berasaskan untuk memberikan akses peranan "admin" kepada semua sumber
peranan pentadbir := authz.NewRole("admin", []string{"*"})
policy := authz.NewPolicy()
policy .AddRole(adminRole)

// Gunakan perisian tengah dasar dalam laluan Gin untuk menguatkuasakan kawalan akses berasaskan peranan
router.GET("/blogs", authMiddleware.CheckPermission(policy, "admin " ), func(c *gin.Context) {

// Return the list of all blogs
Salin selepas log masuk

})

router.GET("/blog/:id", authMiddleware.CheckPermission(dasar, "baca"), func (c *gin.Context) {

// Return the specified blog
Salin selepas log masuk

})

router.POST("/blog", authMiddleware.CheckPermission(dasar, "write"), func(c *gin. Konteks ) {

// Create a new blog
Salin selepas log masuk

})

Dalam kod di atas, peranan bernama "admin" ditakrifkan, yang mempunyai akses kepada semua sumber ("*"). Kemudian, dalam setiap laluan, semak sama ada peranan pengguna mempunyai akses kepada sumber dengan menggunakan fungsi authMiddleware.CheckPermission.

Ringkasan

Artikel ini memperkenalkan cara melaksanakan pengesahan dan kebenaran pelayan Web di Golang. Dengan menggunakan rangka kerja Gin dan perpustakaan yang berkaitan, kami boleh membina perkhidmatan web yang selamat dan boleh dipercayai dengan cepat.

Atas ialah kandungan terperinci Pembelajaran Golang Pengesahan dan kebenaran pelayan web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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