Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah itu log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan golang?

Apakah itu log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan golang?

PHPz
PHPzasal
2023-03-30 09:10:231275semak imbas

Single Sign-On (SSO) ialah kaedah pengesahan pengguna Setelah pengguna log masuk, dia boleh mendapatkan akses dalam sistem atau aplikasi yang berbeza tanpa memasukkan semula nama pengguna dan kata laluan. Dalam aplikasi peringkat perusahaan, log masuk tunggal adalah sangat penting dalam meningkatkan pengalaman pengguna, memudahkan operasi pengurusan dan meningkatkan keselamatan.

Bahasa Golang telah mendapat perhatian yang meluas kerana kecekapan, kesederhanaan dan penyelenggaraan yang mudah Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan log masuk tunggal.

  1. Prinsip log masuk tunggal

Log masuk tunggal terutamanya merangkumi tiga peranan: ejen pengguna, pusat pengesahan dan perkhidmatan sumber. Apabila pengguna log masuk ke sistem aplikasi, dia akan diubah hala ke pusat pengesahan untuk pengesahan identiti Selepas lulus pengesahan, dia masih boleh mendapatkan hak akses dalam perkhidmatan sumber lain.

  1. Prinsip log masuk tunggal Golang

Di Golang, anda boleh menggunakan Kuki atau Token untuk melaksanakan fungsi log masuk tunggal.

2.1 Kaedah kuki

Dalam kaedah Kuki, maklumat log masuk akan disimpan dalam Kuki Apabila anda mengakses perkhidmatan lain selepas log masuk, maklumat dalam Kuki akan dipindahkan ke sumber perkhidmatan, supaya perkhidmatan sumber boleh Mengesahkan identiti pengguna.

Pertama sekali, pusat pengesahan menjalankan pengesahan log masuk, yang menyimpan maklumat pengesahan dalam Kuki Kod adalah seperti berikut:

func Login(c *gin.Context) {
    c.SetCookie("username", "123", 3600, "/", "localhost", false, true)
    c.JSON(200, "登录成功")
}

Dalam kod di atas, parameter pertama dalam Kuki. Kaedah SetCookie ialah nama kuki, parameter kedua ialah nilai kuki, parameter ketiga ialah masa tamat tempoh kuki, parameter keempat ialah laluan sah kuki, parameter kelima ialah nama domain bagi kuki, dan parameter keenam menunjukkan sama ada hanya Menyokong protokol HTTPS, dan parameter terakhir menunjukkan sama ada akses merentas domain dibenarkan.

Dalam perkhidmatan sumber, anda boleh mendapatkan maklumat kuki melalui kaedah c.Request.Cookie("username"):

func SSO(c *gin.Context) {
    cookie, _ := c.Request.Cookie("username")
    if cookie != nil {
        c.JSON(200, "访问成功")
    } else {
        c.JSON(200, "请重新登录")
    }
}

2.2 Kaedah Token

Dalam kaedah Token, pusat pensijilan menyulitkan maklumat pengesahan Dalam bentuk Token, apabila ia dihantar ke perkhidmatan sumber, perkhidmatan sumber mengesahkan kesahihan akaun pengguna melalui penyahsulitan.

Berikut ialah kod pelaksanaan kaedah Token:

func Login(c *gin.Context) {
    username := "123"
    token, err := CreateToken(username)
    if err != nil {
        c.JSON(500, "生成Token错误")
        return
    }

    c.JSON(200, gin.H{
        "Token": token,
    })
}

func CreateToken(username string) (string, error) {
    claims := Claims{
        username,
        jwt.StandardClaims{
            ExpiresAt: time.Now().Add(time.Hour * 24).Unix(),
            Issuer:    "test",
        },
    }
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signedToken, err := token.SignedString([]byte("SecretKey"))
    if err != nil {
        return "", err
    }
    return signedToken, nil
}

func SSO(c *gin.Context) {
    tokenString := c.Request.Header.Get("Authorization")
    if tokenString == "" {
        c.JSON(401, "未登录")
        return
    }
    token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {
        return []byte("SecretKey"), nil
    })
    if err != nil || !token.Valid {
        c.JSON(401, "未登录")
        return
    }
    c.JSON(200, "访问成功")
}

type Claims struct {
    Username string `json:"username"`
    jwt.StandardClaims
}

Dalam kod di atas, Token yang dijana oleh kaedah CreateToken mengandungi nama pengguna, masa tamat tempoh, pengeluar dan maklumat lain , di pusat pensijilan Selepas Token dijana, Token dihantar kepada perkhidmatan sumber, dan kesahihan Token disahkan melalui penyahsulitan dalam perkhidmatan sumber untuk mencapai log masuk tunggal.

  1. Ringkasan

Fungsi log masuk tunggal Golang boleh dilaksanakan melalui Kuki atau Token. Dalam aplikasi peringkat perusahaan, log masuk tunggal boleh memudahkan proses operasi pengguna, meningkatkan keselamatan aplikasi dan membawa faedah operasi yang lebih baik kepada perusahaan.

Atas ialah kandungan terperinci Apakah itu log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan 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