Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengesahkan identiti dalam golang

Bagaimana untuk mengesahkan identiti dalam golang

PHPz
PHPzasal
2023-04-11 09:13:28991semak imbas

Dalam dunia internet moden, keselamatan dan pengesahan identiti adalah penting. Perkara yang sama berlaku untuk pembangun membangunkan aplikasi menggunakan Golang. Artikel ini akan menerangkan pengesahan dalam Golang, yang merangkumi Pengesahan Asas dan Pengesahan OAuth 2.0.

Pengesahan Asas

Pengesahan Asas ialah salah satu kaedah pengesahan yang paling mudah dan biasa. Di Golang, kita boleh menggunakan pakej net/http terbina dalam untuk melaksanakan pengesahan asas. Berikut ialah contoh:

package main

import (
    "fmt"
    "net/http"
)

func BasicAuth(handler http.HandlerFunc, username, password string) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        user, pass, ok := r.BasicAuth()
        if !ok || user != username || pass != password {
            w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
            w.WriteHeader(401)
            w.Write([]byte("Unauthorized.\n"))
            return
        }
        handler(w, r)
    }
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    username := "user"
    password := "pass"
    http.HandleFunc("/", BasicAuth(handler, username, password))
    http.ListenAndServe(":8080", nil)
}

Dalam contoh di atas, kami telah menentukan fungsi BasicAuth yang mengesahkan bahawa nama pengguna dan kata laluan sepadan dengan bukti kelayakan yang disediakan oleh r.BasicAuth(). Jika tiada bukti kelayakan diberikan atau bukti kelayakan yang diberikan tidak betul, respons HTTP 401 Tanpa kebenaran akan dicetuskan. Jika bukti kelayakan berjaya disahkan, fungsi handler dipanggil.

Selain contoh pengesahan asas ini, anda juga boleh menggunakan perpustakaan pengesahan yang disediakan oleh pakej kepunyaan pihak ketiga yang lain, seperti Gorilla Toolkit.

Pengesahan OAuth 2.0

OAuth2.0 ialah standard terbuka untuk proses membenarkan pihak ketiga mengakses sumber pengguna yang dibenarkan. Di Golang, kita boleh menggunakan pakej go-oauth2/oauth2 untuk melaksanakan pengesahan OAuth 2.0.

Langkah 1: Daftar aplikasi dan dapatkan ID pelanggan dan kunci

Kami perlu mendaftarkan permohonan kami terlebih dahulu di tapak web penyedia OAuth2.0 dan dapatkan ID dan kunci pelanggan. Sebagai contoh, kami boleh membuat dan mendaftarkan projek baharu dalam Google Cloud Console dan memilih "Buat Bukti Kelayakan" untuk mendapatkan ID dan rahsia pelanggan kami.

Langkah 2: Sediakan tetapan klien

Kami perlu menyediakan konfigurasi klien untuk mengesahkan menggunakan OAuth2.0. Kita boleh mencapai ini dengan mencipta objek oauth2.Config:

import (
    "golang.org/x/oauth2"
)

var (
    clientID     = "YOUR_CLIENT_ID"
    clientSecret = "YOUR_CLIENT_SECRET"
    redirectURL  = "http://localhost:8080/callback"
    endpoint     = google.Endpoint
    scopes       = []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"}
)

var (
    oauth2Config = oauth2.Config{
        ClientID:     clientID,
        ClientSecret: clientSecret,
        RedirectURL:  redirectURL,
        Endpoint:     endpoint,
        Scopes:       scopes,
    }
)

Dalam contoh di atas, kami mentakrifkan ID pelanggan, rahsia pelanggan, URL ubah hala, titik akhir dan skop OAuth2.0. endpoint di sini berasal daripada google.Endpoint, iaitu infrastruktur pembekal OAuth2.0 yang dipratakrifkan.

Langkah 3: Ubah hala ke halaman kebenaran

Sekarang kami telah menyediakan konfigurasi klien, kami perlu mengubah hala pengguna ke halaman kebenaran OAuth2.0. Kita boleh menggunakan kaedah oauth2Config.AuthCodeURL untuk mendapatkan URL kebenaran. Berikut ialah contoh:

import (
    "fmt"
    "net/http"
)

func handleAuthorize(w http.ResponseWriter, r *http.Request) {
    url := oauth2Config.AuthCodeURL("")
    http.Redirect(w, r, url, http.StatusFound)
}

Dalam contoh di atas, kami menggunakan kaedah oauth2Config.AuthCodeURL("") untuk mendapatkan URL kebenaran dan kemudian menggunakan http.Redirect untuk mengubah hala pengguna ke halaman kebenaran.

Langkah 4: Kendalikan panggilan balik

Setelah pengguna bersetuju untuk membenarkan aplikasi kami, pembekal OAuth2.0 akan mengubah hala pengguna ke URL ubah hala yang kami sediakan. Dalam URL ubah hala, kami akan memasukkan kod kebenaran yang perlu kami gunakan untuk mendapatkan token akses.

Kami perlu menentukan pengendali panggilan balik untuk mengendalikan permintaan panggilan balik daripada pembekal OAuth2.0. Berikut ialah contoh:

func handleOAuth2Callback(w http.ResponseWriter, r *http.Request) {
    code := r.FormValue("code")
    token, err := oauth2Config.Exchange(oauth2.NoContext, code)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    client := oauth2Config.Client(oauth2.NoContext, token)
    resp, err := client.Get("https://www.googleapis.com/oauth2/v1/userinfo?alt=json")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer resp.Body.Close()

    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    fmt.Fprintf(w, "Data: %s", data)
}

Dalam contoh di atas, kami mula-mula mengekstrak kod kebenaran daripada panggilan balik dan kemudian menggunakan kaedah oauth2Config.Exchange untuk mendapatkan token akses. Kami boleh menggunakan kaedah oauth2Config.Client untuk mencipta klien HTTP yang disahkan dan menggunakan klien ini untuk memanggil API Google OAuth2.0.

Akhirnya kami boleh membalas permintaan dengan menulis data tindak balas dalam pembolehubah data.

Kesimpulan

Dalam artikel ini, kami memperkenalkan dua cara untuk melaksanakan pengesahan di Golang: Pengesahan Asas dan Pengesahan OAuth 2.0. Dengan menggunakan kaedah ini, kami boleh memastikan bahawa aplikasi kami selamat dan hanya membenarkan akses kepada pengguna yang dipercayai.

Atas ialah kandungan terperinci Bagaimana untuk mengesahkan identiti dalam golang. 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