ホームページ  >  記事  >  バックエンド開発  >  JWT を使用して Beego に認証を実装する

JWT を使用して Beego に認証を実装する

PHPz
PHPzオリジナル
2023-06-22 12:44:551718ブラウズ

インターネットやモバイルインターネットの急速な発展に伴い、認証や権限制御を必要とするアプリケーションが増えており、軽量な認証・認可機構としてJWT(JSON Web Token)がWEBアプリケーションで広く利用されています。

Beego は Go 言語をベースにした MVC フレームワークであり、効率性、シンプルさ、拡張性の利点を備えています。この記事では、Beego で JWT を使用して認証を実装する方法を紹介します。

1. JWT の概要

JSON Web Token (JWT) は、ネットワーク上で ID とクレーム情報を送信するためのオープン スタンダード (RFC 7519) です。情報を暗号化してデジタル署名できるため、さまざまなシステム間で情報を安全に転送できます。 JWT は、ヘッダー、クレーム、署名の 3 つの部分で構成されます。ヘッダーとクレームが Base64 を使用してエンコードされている場合、署名ではキーを使用してデータを暗号化します。

2. Beego は JWT を統合します

1. 依存関係をインストールします

最初に 2 つの依存関係パッケージをインストールする必要があります:

go get github.com/dgrijalva/ jwt-go
go get github.com/astaxie/beego

2. JWT ツール クラスの作成

生成、検証のための JWT 操作をカプセル化することで、JWT ツール クラスを作成できます。 JWT およびその他の操作。これには、トークンの発行、トークンの検証、トークンに格納されている情報の取得などの方法が含まれます。コードは次のとおりです:

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. 認証に JWT を使用します

Beego では、ミドルウェアを使用してユーザーの ID を確認できます。例:

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上記のコードでは、まずリクエスト ヘッダー内のトークンを取得し、次に JWT を通じてトークンを解析して、そこに保存されているユーザー情報を取得します。最後に、トークン内のユーザー情報とデータベースに保存されているユーザー情報を照合し、検証に合格した場合にのみ、関連するインターフェイスに正常にアクセスできるようになります。

3. 概要

上記の手順により、JWT 認証メカニズムを統合し、ユーザー ID 検証、権限制御、その他の操作を Beego アプリケーションに実装することができました。ただし、実際のアプリケーションでは、JWT キーのセキュリティを確保する必要があり、JWT に格納される情報が妥当であるかどうかも考慮する必要があることに注意してください。

以上がJWT を使用して Beego に認証を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。