Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melakukan pengesahan dan kebenaran dalam Go?

Bagaimana untuk melakukan pengesahan dan kebenaran dalam Go?

WBOY
WBOYasal
2023-05-11 16:10:361031semak imbas

Dalam era digital hari ini, keselamatan dan perlindungan privasi telah menjadi isu yang amat membimbangkan orang ramai. Melaksanakan pengesahan dan kebenaran adalah langkah penting dalam membangunkan aplikasi web. Sebagai bahasa pengaturcaraan yang cekap dan mudah dipelajari, bahasa Go menyediakan banyak alat dan perpustakaan yang berkuasa untuk mengendalikan isu pengesahan dan kebenaran. Artikel ini akan menerangkan cara melakukan pengesahan dan kebenaran dalam Go.

  1. Apakah pengesahan dan kebenaran?

Pengesahan merujuk kepada pengesahan identiti pengguna, biasanya melalui nama pengguna dan kata laluan. Setelah pengguna berjaya log masuk, sistem akan mengeluarkan token kepada pengguna, dan pengguna perlu membawa token setiap kali dia mengakses sistem. Ini memastikan hanya pengguna yang sah sahaja dibenarkan memasuki sistem dan menghalang pengguna yang menyalahi undang-undang daripada menyerang sistem.

Kebenaran merujuk kepada mengawal hak akses pengguna yang berbeza kepada sumber sistem. Melalui mekanisme kebenaran, pengguna tertentu boleh disekat daripada mengakses sumber tertentu dan dilarang daripada mengakses sumber sensitif lain. Ini boleh melindungi keselamatan sistem dan menghalang orang yang berniat jahat daripada mencuri atau memusnahkan data dalam sistem.

  1. Pengesahan dalam Go

Bahasa Go menyediakan banyak perpustakaan dan rangka kerja untuk pengesahan, antaranya yang lebih biasa digunakan ialah:

  • bcrypt: digunakan untuk menyulitkan dan menyahsulit kata laluan.
  • crypto/rand: digunakan untuk menjana nombor rawak.
  • net/http: digunakan untuk mengendalikan permintaan dan respons HTTP.
  • gorila/sesi: digunakan untuk mengurus dan menyimpan data sesi pengguna.

Kami boleh menggunakan perpustakaan dan rangka kerja ini untuk melaksanakan pengesahan dalam aplikasi web. Berikut ialah beberapa cadangan untuk melaksanakan pengesahan:

2.1 Gunakan HTTPS

Adalah disyorkan untuk menggunakan HTTPS dalam aplikasi web untuk memastikan keselamatan data log masuk pengguna. HTTPS ialah protokol yang menggunakan protokol penyulitan SSL atau TLS untuk melindungi penghantaran data, yang boleh menghalang penggodam secara berkesan daripada memintas kata laluan akaun pengguna. Menggunakan HTTPS juga boleh menghalang ancaman keselamatan seperti serangan man-in-the-middle.

2.2. Gunakan bcrypt untuk menyulitkan kata laluan

Dalam aplikasi web, adalah disyorkan untuk menggunakan algoritma bcrypt untuk menyulitkan kata laluan. bcrypt menggunakan mekanisme garam dan berbilang pusingan operasi pencincangan untuk melindungi kata laluan, yang boleh menghalang keretakan kekerasan secara berkesan. Berikut ialah contoh kod yang menggunakan algoritma bcrypt untuk menyulitkan kata laluan:

import "golang.org/x/crypto/bcrypt"

func hashPassword(password string) (string, error) {
    bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
    return string(bytes), err
}

func checkPasswordHash(password, hash string) bool {
    err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
    return err == nil
}

2.3 Mengurus sesi pengguna

Untuk mengekalkan status pengesahan pengguna, kami perlu menggunakan sesi untuk menyimpan dan mengurus. maklumat Sesi pengesahan pengguna. Dalam Go, pengurusan sesi boleh dilaksanakan menggunakan perpustakaan gorila/sesi. Berikut ialah contoh kod yang melaksanakan pengurusan sesi melalui gorila/sesi:

import (
    "github.com/gorilla/sessions"
    "net/http"
)

var store = sessions.NewCookieStore([]byte("something-very-secret"))

func handleLogin(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    // 验证用户的登录信息,如果通过,设置session值
    session.Values["authenticated"] = true
    session.Save(r, w)
}

func handleLogout(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    session.Values["authenticated"] = false
    session.Save(r, w)
}

func handleRestrictedAccess(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    // 检查session中的认证状态
    if auth, ok := session.Values["authenticated"].(bool); !ok || !auth {
        http.Error(w, "Forbidden", http.StatusForbidden)
        return
    }
    // 处理受保护的资源
}
  1. Keizinan dalam Go

Cara kebenaran biasa termasuk kebenaran peranan dan kebenaran kebenaran, antaranya Keizinan peranan merujuk kepada memberikan peranan khusus kepada pengguna, manakala kebenaran kebenaran merujuk kepada memberikan kebenaran khusus kepada pengguna. Dalam Go, anda boleh menggunakan alatan dan rangka kerja berikut untuk melaksanakan kebenaran:

  • net/http: digunakan untuk mengendalikan permintaan dan respons HTTP.
  • gorila/mux: Digunakan untuk memudahkan penciptaan dan pengurusan laluan.
  • kabin: digunakan untuk kawalan kebenaran RBAC.

Berikut ialah contoh cara menggunakan gorila/mux dan casbin untuk melaksanakan kawalan kebenaran:

import (
    "github.com/casbin/casbin"
    "github.com/gorilla/mux"
    "net/http"
)

// 通过casbin检查用户是否有权限访问指定的URL
func checkAuth(action, user, path string) bool {
    e := casbin.NewEnforcer("path to .conf file", "path to .csv file")
    return e.Enforce(user, path, action)
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    path := vars["path"]
    user := r.Header.Get("User")
    if checkAuth(r.Method, user, path) {
        // 处理受保护的资源
    } else {
        http.Error(w, "Forbidden", http.StatusForbidden)
        return
    }
}

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/{path}", handleRequest)
    http.ListenAndServe(":8000", router)
}

Kod di atas menunjukkan cara menggunakan casbin untuk melaksanakan kawalan kebenaran RBAC yang mudah, yang memerlukan pembacaan Ambil fail .conf dan fail .csv untuk mengurus peraturan akses antara peranan, pengguna dan sumber.

  1. Ringkasan

Artikel ini memperkenalkan cara melaksanakan fungsi pengesahan dan kebenaran dalam Go, termasuk menggunakan bcrypt untuk menyulitkan kata laluan dan menggunakan gorila/sesi untuk menyimpan dan mengurus Sesi pengguna, menggunakan casbin untuk melaksanakan kawalan kebenaran RBAC, dsb. Pengesahan dan kebenaran adalah penting untuk keselamatan dan perlindungan data aplikasi web. Saya harap artikel ini dapat memberi anda rujukan dan idea yang berharga.

Atas ialah kandungan terperinci Bagaimana untuk melakukan pengesahan dan kebenaran dalam 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