Rumah >pembangunan bahagian belakang >Golang >golang tidak mempunyai kebenaran
Dalam pembangunan perisian, pengurusan kebenaran adalah isu yang sangat penting. Biasanya, untuk aplikasi peringkat perusahaan, kebenaran yang berbeza perlu ditetapkan untuk pengguna yang berbeza untuk memastikan keselamatan dan kebolehpercayaan sistem. Dalam bahasa Go, pengurusan kebenaran juga merupakan komponen penting. Namun, dalam perkembangan sebenar, kita mungkin menghadapi situasi "golang tiada kebenaran".
Bahasa Go ialah bahasa pengaturcaraan yang cekap, ringkas, merentas platform dengan ciri penaipan statik dan pengumpulan sampah. Kemunculan bahasa Go telah membawa peningkatan teknikal yang ketara kepada pengaturcara biasa dan jurutera rangkaian, dengan sangat memudahkan kerja pengaturcara. Walaupun bahasa Go adalah bahasa pengaturcaraan yang baik, pemprosesan khas masih diperlukan dari segi pengurusan kebenaran, jika tidak masalah "golang tidak mempunyai kebenaran" akan berlaku.
Pertama sekali, kita perlu menjelaskan cara kebenaran ditunjukkan dalam bahasa Go. Dalam bahasa Go, kebenaran biasanya ditunjukkan dalam akses fail dan direktori. Untuk fail atau direktori, pengguna yang berbeza mempunyai kebenaran yang berbeza, seperti membaca, menulis, melaksanakan, dsb. Dalam amalan, kami biasanya menggunakan kaedah pengurusan kebenaran sistem fail bagi sistem pengendalian Linux, iaitu, menetapkan kebenaran akses yang sepadan untuk setiap fail atau direktori, dan kemudian mengurus kebenaran dengan mengelaskan dan membenarkan pengguna.
Dalam bahasa Go, anda boleh mendapatkan kebenaran akses fail atau direktori melalui fungsi dalam pakej os. Sebagai contoh, coretan kod berikut boleh mendapatkan kebenaran fail:
package main import ( "fmt" "os" ) func main() { file, err := os.Stat("test.txt") if err != nil { fmt.Println(err) return } fmt.Printf("File Permissions: %o ", file.Mode().Perm()) }
Di sini, kami menggunakan fungsi Stat dalam pakej os untuk mendapatkan maklumat fail test.txt, dan menggunakan fungsi Mod untuk dapatkan mod kebenaran fail. Fungsi Mod mengembalikan nilai jenis os.FileMode, yang boleh digunakan untuk mendapatkan kebenaran akses fail. Kami menukar corak kebenaran fail kepada nombor perlapanan dan mencetak output untuk lebih memahami kebenaran fail.
Walau bagaimanapun, pengurusan kebenaran dalam bahasa Go bukan hanya tentang mendapatkan kebenaran akses kepada fail atau direktori. Dalam pembangunan sebenar, kita juga perlu mempertimbangkan cara melaksanakan pengesahan dan kebenaran pengguna. Dalam bahasa Go, anda boleh menggunakan pakej jwt-go untuk melaksanakan fungsi pengesahan dan kebenaran. jwt-go ialah perpustakaan bahasa Go untuk melaksanakan JWT (JSON Web Token). Ia menyediakan API mudah supaya pembangun boleh membuat, menandatangani dan mengesahkan JWT dengan mudah.
Berikut ialah contoh kod mudah untuk mencipta JWT dan menghantarnya kepada pelanggan:
package main import ( "fmt" "net/http" "time" "github.com/dgrijalva/jwt-go" ) func main() { http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) { // 获取用户名和密码 username := r.FormValue("username") password := r.FormValue("password") // 将用户名和密码进行身份验证 if username == "admin" && password == "123456" { // 创建JWT token := jwt.New(jwt.SigningMethodHS256) claims := token.Claims.(jwt.MapClaims) claims["username"] = username claims["exp"] = time.Now().Add(time.Hour * 24).Unix() // 签名JWT tokenString, err := token.SignedString([]byte("mysecret")) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintln(w, "Token signing error") return } // 将JWT发送给客户端 w.Header().Set("Authorization", tokenString) fmt.Fprintln(w, "JWT created and sent successfully") } else { w.WriteHeader(http.StatusUnauthorized) fmt.Fprintln(w, "Invalid username or password") } }) http.ListenAndServe(":8080", nil) }
Dalam contoh ini, apabila pengguna menyerahkan nama pengguna dan kata laluan mereka melalui halaman log masuk, Pengesahan berlaku. Jika pengesahan lulus, JWT dibuat dan dihantar kepada pelanggan. Apabila mencipta JWT, kami menggunakan API yang disediakan oleh pakej jwt-go untuk menetapkan masa tamat tempoh JWT, kunci tandatangan dan maklumat lain. Apabila menandatangani JWT, kami menetapkan kunci tandatangan kepada "rahsia saya", kunci ini harus disimpan di bahagian pelayan dan tidak boleh dibocorkan kepada klien. Akhirnya, kami menghantar JWT yang ditandatangani kepada pelanggan.
Selepas pelanggan menerima JWT, ia boleh menyimpan JWT dalam kuki atau storan setempat dan menghantarnya ke pelayan atas setiap permintaan. Di bahagian pelayan, kami perlu mengesahkan tandatangan JWT dan menghuraikan muatan dalam JWT. Jika pengesahan JWT berjaya, pengguna boleh diberi kuasa untuk mengakses sumber yang sepadan.
Berikut ialah contoh kod untuk mengesahkan JWT dan membenarkan pengguna mengakses sumber:
package main import ( "fmt" "net/http" "github.com/dgrijalva/jwt-go" ) func main() { http.HandleFunc("/protected", func(w http.ResponseWriter, r *http.Request) { // 验证JWT tokenString := r.Header.Get("Authorization") token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte("mysecret"), nil }) if err != nil { w.WriteHeader(http.StatusUnauthorized) fmt.Fprintln(w, "JWT error:", err) return } // 检查JWT的有效性 if !token.Valid { w.WriteHeader(http.StatusUnauthorized) fmt.Fprintln(w, "Invalid JWT") return } // 授权用户访问资源 fmt.Fprintln(w, "You are authorized to access this resource") }) http.ListenAndServe(":8080", nil) }
Dalam contoh ini, apabila pengguna membuat permintaan untuk mengakses sumber "/protected", kita perlu mengesahkan JWT dan memberi kuasa kepada pengguna untuk mengakses sumber tersebut. Apabila mengesahkan JWT, kami memanggil fungsi Parse dan menetapkan kunci tandatangan kepada "rahsia saya". Jika pengesahan JWT berjaya, pengguna boleh diberi kuasa untuk mengakses sumber tersebut. Akhir sekali, kami mengembalikan respons kepada klien yang menunjukkan bahawa pengguna telah diberi kuasa untuk mengakses sumber tersebut.
Ringkasnya, "golang tidak mempunyai kebenaran" bukanlah masalah yang tidak dapat diselesaikan. Dalam bahasa Go, kita boleh menggunakan pakej os untuk mendapatkan kebenaran akses kepada fail dan direktori, dan pakej jwt-go untuk melaksanakan fungsi pengesahan dan kebenaran untuk memastikan keselamatan dan kebolehpercayaan sistem. Sudah tentu, dalam pembangunan sebenar, kita juga perlu mempertimbangkan isu keselamatan lain, seperti suntikan SQL, serangan skrip merentas tapak, dll., untuk memastikan keselamatan aplikasi.
Atas ialah kandungan terperinci golang tidak mempunyai kebenaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!