Rumah >pembangunan bahagian belakang >Golang >Cara menggunakan JWT untuk melaksanakan pengesahan OAuth2.0 dalam projek Golang

Cara menggunakan JWT untuk melaksanakan pengesahan OAuth2.0 dalam projek Golang

王林
王林asal
2023-06-04 12:10:341283semak imbas

Dengan perkembangan pesat Internet, semakin banyak aplikasi perlu melaksanakan pengesahan dan kebenaran pengguna Sebagai salah satu rangka kerja kebenaran yang paling popular, OAuth2.0 digunakan secara meluas dalam aplikasi Web dan mudah alih. JWT (JSON Web Token) ialah piawaian pengesahan yang digunakan secara meluas yang membolehkan pembangun menghantar maklumat dengan selamat antara pelanggan dan pelayan. Sangat mudah untuk menggunakan JWT untuk melaksanakan pengesahan OAuth2.0 dalam projek Golang Di bawah kami akan memperkenalkan cara melaksanakannya.

  1. Pasang perpustakaan JWT

Sebelum menggunakan JWT, anda perlu memasang perpustakaan jwt-go di bawah Golang. Gunakan arahan berikut untuk melengkapkan pemasangan.

go get github.com/dgrijalva/jwt-go
  1. Proses pengesahan JWT

Sebelum memperkenalkan cara menggunakan JWT untuk melaksanakan pengesahan OAuth2.0, mari kita membiasakan diri dengan konsep asas dan prinsip kerja JWT. Sebagai kaedah pengesahan standard, JWT mempunyai ciri-ciri berikut:

  • Ia terdiri daripada tiga bahagian: Pengepala, Muatan dan Tandatangan
  • Kaedah pengekodan Pengekodan Base64Url
  • Dapat menghantar data dengan selamat dalam persekitaran merentas domain

Proses pengesahan JWT adalah seperti berikut:

  • Pelanggan menghantar permintaan
  • Pelayan mengesahkan maklumat yang diminta oleh pelanggan, menjana token JWT dan mengembalikannya kepada pelanggan
  • Klien menyimpan token JWT secara setempat dan menggunakan token JWT sebagai Keizinan setiap kali permintaan dihantar kepada pelayan
  • Pelayan menerima permintaan, mengesahkan sama ada token JWT adalah sah dan mengembalikan hasil permintaan jika ia sah, sebaliknya mengembalikan mesej ralat
  1. Pelaksanaan Pengesahan JWT

Untuk menggunakan JWT bagi melaksanakan pengesahan OAuth2.0 dalam projek Golang, anda perlu melengkapkan langkah berikut:

  • Buat token JWT
  • Sahkan token JWT

Di bawah ini kami akan memperkenalkan cara untuk melaksanakannya.

3.1 Cipta token JWT

Apabila menjana token JWT pada bahagian pelayan, tiga parameter perlu ditetapkan: kunci, maklumat muatan (Tuntutan) dan masa tamat tempoh (ExpiresAt).

Gunakan kod berikut untuk mencipta token JWT:

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

func CreateJWT() (string, error) {
    // 设置密钥
    secret := []byte("secret")

    // 设置载荷信息
    token := jwt.New(jwt.SigningMethodHS256)
    claims := token.Claims.(jwt.MapClaims)
    claims["authorized"] = true
    claims["user_id"] = 1
    claims["exp"] = time.Now().Add(time.Minute * 30).Unix()

    // 创建JWT令牌
    tokenString, err := token.SignedString(secret)
    if err != nil {
        return "", err
    }

    return tokenString, nil
}

Dalam kod di atas, kami menetapkan kunci kepada "rahsia", dan maklumat muatan termasuk status kebenaran pengguna, ID pengguna dan tamat tempoh masa. Akhirnya buat token JWT menggunakan kaedah token.SignedString.

3.2 Sahkan token JWT

Apabila pelanggan menghantar permintaan, token JWT perlu disimpan secara setempat dan dihantar sebagai pengepala Kebenaran dalam setiap permintaan. Selepas menerima permintaan, pelayan perlu mengesahkan kesahihan token JWT.

Token JWT boleh disahkan menggunakan kod berikut:

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

func VerifyJWT(tokenString string) (jwt.MapClaims, error) {
    // 设置密钥
    secret := []byte("secret")

    // 解析JWT令牌
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
        }

        return secret, nil
    })

    if err != nil {
        return nil, err
    }

    // 校验JWT令牌
    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        return claims, nil
    }

    return nil, fmt.Errorf("invalid token")
}

Dalam kod di atas, kami menetapkan rahsia kepada "rahsia", gunakan kaedah jwt.Parse untuk menghuraikan token JWT, dan gunakan token .Claims.(jwt.MapClaims) menukar maklumat muatan kepada jenis MapClaims. Akhir sekali, kami mengesahkan bahawa token JWT adalah sah.

  1. Kesimpulan

Menggunakan JWT untuk melaksanakan pengesahan OAuth2.0 dalam projek Golang adalah sangat mudah Anda hanya perlu melengkapkan dua langkah di atas. Sebagai kaedah pengesahan standard, JWT mempunyai prestasi dan keselamatan merentas domain yang sangat baik. Ia boleh memberikan kami kaedah pengesahan yang cekap, selamat dan mudah, yang meningkatkan kecekapan pembangunan dan pengalaman pengguna.

Atas ialah kandungan terperinci Cara menggunakan JWT untuk melaksanakan pengesahan OAuth2.0 dalam projek 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