JWT を使用して Golang プロジェクトに OAuth2.0 認証を実装する方法

王林
リリース: 2023-06-04 12:10:34
オリジナル
1224 人が閲覧しました

インターネットの急速な発展に伴い、ユーザー認証と認可を実装する必要があるアプリケーションがますます増えており、OAuth2.0 は最も人気のある認可フレームワークの 1 つとして、Web アプリケーションやモバイル アプリケーションで広く使用されています。 JWT (JSON Web Token) は、開発者がクライアントとサーバー間で情報を安全に送信できるようにする、広く使用されている認証標準です。 Golang プロジェクトに JWT を使用して OAuth2.0 認証を実装するのは非常に簡単ですので、以下にその実装方法を紹介します。

  1. JWT ライブラリのインストール

JWT を使用する前に、Golang に jwt-go ライブラリをインストールする必要があります。次のコマンドを使用してインストールを完了します。

go get github.com/dgrijalva/jwt-go
ログイン後にコピー
  1. JWT 認証プロセス

JWT を使用して OAuth2.0 認証を実装する方法を紹介する前に、まず JWT の基本概念と動作原理を理解しましょう。標準の認証方式として、JWT には次の特徴があります。

  • ヘッダー、ペイロード、署名の 3 つの部分で構成されます。
  • エンコード方式 Encoding Base64Url
  • 安全な認証を可能にします。クロスドメイン環境でのデータ送信

JWT 認証プロセスは次のとおりです。

  • クライアントはリクエストを送信します
  • サーバーは情報を検証します
  • #クライアントは JWT トークンをローカルに保存し、リクエストが送信されるたびにその JWT トークンを認証として使用します。ヘッダーはサーバーに送信されます。
  • サーバーはリクエストを受信し、JWT トークンが有効かどうかを検証します。有効な場合はリクエストの結果を返し、そうでない場合はエラー メッセージを返します。
    実装JWT 認証
JWT を使用して Golang プロジェクトに OAuth2.0 認証を実装するには、次の手順を完了する必要があります:

    JWT トークンの作成
  • JWTトークンの検証
実装方法を順番に紹介していきます。

3.1 JWT トークンの作成

サーバー側で JWT トークンを生成する場合、キー、ペイロード情報 (Claims)、有効期限 (ExpiresAt) の 3 つのパラメーターを設定する必要があります。

次のコードを使用して 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
}
ログイン後にコピー

上記のコードでは、キーを「secret」に設定し、ペイロード情報にはユーザー認証ステータス、ユーザー ID、有効期限が含まれています。時間。最後に、token.SignedString メソッドを使用して JWT トークンを作成します。

3.2 JWT トークンの検証

クライアントがリクエストを送信するとき、JWT トークンはローカルに保存される必要があり、JWT トークンは各リクエストの Authorization ヘッダーとして送信される必要があります。リクエストを受信した後、サーバーは JWT トークンの有効性を検証する必要があります。

次のコードを使用して JWT トークンを確認します。

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")
}
ログイン後にコピー
上記のコードでは、キーを「secret」に設定し、jwt.Parse メソッドを使用して JWT トークンを解析します。 use token .Claims.(jwt.MapClaims) はペイロード情報を MapClaims 型に変換します。最後に、JWT トークンが有効であることを確認します。

    結論
JWT を使用して Golang プロジェクトに OAuth2.0 認証を実装するのは非常に簡単で、上記の 2 つの手順を完了するだけです。標準的な認証方式である JWT は、クロスドメインのパフォーマンスとセキュリティに優れており、効率的で安全かつ便利な認証方式を提供し、開発効率とユーザー エクスペリエンスを大幅に向上させます。

以上がJWT を使用して Golang プロジェクトに OAuth2.0 認証を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!