Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan JWT untuk melaksanakan pengesahan dalam Beego

Menggunakan JWT untuk melaksanakan pengesahan dalam Beego

PHPz
PHPzasal
2023-06-22 12:44:551720semak imbas

Dengan perkembangan pesat Internet dan Internet mudah alih, semakin banyak aplikasi memerlukan pengesahan dan kawalan kebenaran, dan JWT (JSON Web Token), sebagai mekanisme pengesahan dan kebenaran yang ringan, digunakan dalam aplikasi WEB digunakan secara meluas dalam.

Beego ialah rangka kerja MVC berdasarkan bahasa Go, yang mempunyai kelebihan kecekapan, kesederhanaan dan kebolehskalaan Artikel ini akan memperkenalkan cara menggunakan JWT untuk melaksanakan pengesahan dalam Beego.

1. Pengenalan kepada JWT

JSON Web Token (JWT) ialah standard terbuka (RFC 7519) untuk menghantar maklumat identiti dan tuntutan melalui rangkaian. Ia boleh memindahkan maklumat dengan selamat antara pelbagai sistem kerana ia boleh menyulitkan dan menandatangani maklumat secara digital. JWT terdiri daripada tiga bahagian: pengepala, tuntutan dan tandatangan. Apabila pengepala dan tuntutan dikodkan menggunakan base64, tandatangan menggunakan kunci untuk menyulitkan data.

2. Beego menyepadukan JWT

1. Pasang dependensi

Mula-mula kita perlu memasang dua pakej dependensi:

pergi dapatkan github.com/dgrijalva/ jwt-go
pergi dapatkan github.com/astaxie/beego

2 Cipta kelas alat JWT

Kami boleh mencipta kelas alat JWT dengan merangkum operasi JWT untuk menjana , sahkan. JWT dan operasi lain. Ini termasuk kaedah seperti mengeluarkan token, mengesahkan token dan mendapatkan maklumat yang disimpan dalam token. Kodnya adalah seperti berikut:

package utils

import (
    "errors"
    "github.com/dgrijalva/jwt-go"
    "time"
)

// JWT构造体
type JWT struct {
    signingKey []byte
}

// 定义JWT参数
type CustomClaims struct {
    UserID   string `json:"userId"`
    UserName string `json:"userName"`
    jwt.StandardClaims
}

// 构造函数
func NewJWT() *JWT {
    return &JWT{
        []byte("jwt-secret-key"),
    }
}

// 生成token
func (j *JWT) CreateToken(claims CustomClaims) (string, error) {
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

    return token.SignedString(j.signingKey)
}

// 解析token
func (j *JWT) ParseToken(tokenString string) (*CustomClaims, error) {
    token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, errors.New("签名方法不正确")
        }
        return j.signingKey, nil
    })

    if err != nil {
        return nil, err
    }

    if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid {
        return claims, nil
    }

    return nil, errors.New("无效的token")
}

3. Gunakan JWT untuk pengesahan

Dalam Beego, kami boleh menggunakan middleware untuk mengesahkan identiti pengguna, contohnya:

package controllers

import (
    "myProject/utils"
    "github.com/astaxie/beego"
    "github.com/dgrijalva/jwt-go"
)

type BaseController struct {
    beego.Controller
}

type CustomClaims struct {
    UserID   string `json:"userId"`
    UserName string `json:"userName"`
    jwt.StandardClaims
}

func (c *BaseController) Prepare() {
    // 获取请求头中的token
    tokenString := c.Ctx.Request.Header.Get("Authorization")

    // 创建JWT实例
    jwt := utils.NewJWT()

    // 解析token,获取token中存储的用户信息
    claims, err := jwt.ParseToken(tokenString)

    if err != nil {
        c.Data["json"] = "无效的token"
        c.ServeJSON()
        return
    }

    // 验证token中的用户信息
    if claims.UserID != "123456" || claims.UserName != "test" {
        c.Data["json"] = "用户信息验证失败"
        c.ServeJSON()
        return
    }
}

In In kod di atas, kami mula-mula mendapatkan token dalam pengepala permintaan, dan kemudian menghuraikan token melalui JWT untuk mendapatkan maklumat pengguna yang disimpan di dalamnya. Akhir sekali, kami mengesahkan maklumat pengguna dalam token dengan maklumat pengguna yang disimpan dalam pangkalan data kami Hanya selepas lulus pengesahan, kami boleh mengakses antara muka yang berkaitan secara normal.

3. Ringkasan

Melalui langkah di atas, kami telah berjaya menyepadukan mekanisme pengesahan JWT dan melaksanakan pengesahan identiti pengguna, kawalan kebenaran dan operasi lain dalam aplikasi Beego. Walau bagaimanapun, perlu diingatkan bahawa dalam aplikasi sebenar, kita perlu memastikan keselamatan kunci JWT, dan kita juga perlu mempertimbangkan sama ada maklumat yang disimpan dalam JWT adalah munasabah.

Atas ialah kandungan terperinci Menggunakan JWT untuk melaksanakan pengesahan dalam Beego. 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