株式会社NiMiLのロゴ

GinでJWT認証を行う

公開 2021/2/26:更新 2021/3/2
アイキャッチ画像

GoのWebフレームワークのgithub.com/gin-gonic/ginでJWT認証を行いたい場面で使いやすいライブラリがなかったのでモジュールを作成しました。

ソースコードはこちら

  1. まず、ローカルで秘密鍵の発行を行います。
openssl genrsa -out private.key 2048

2. これらをインポートします。

import (
	"github.com/gin-gonic/gin"
	"github.com/ken109/gin-jwt"
	"io/ioutil"
	"net/http"
)

main.goはこちらです。

package main
import (
	"github.com/gin-gonic/gin"
	"github.com/ken109/gin-jwt"
	"io/ioutil"
	"net/http"
)

func main() {
	pemBytes, err := ioutil.ReadFile("private.key")
	if err != nil {
		panic(err)
	}
	// setup
	if err = jwt.SetUp(pemBytes, jwt.Option{}); err != nil {
		panic(err)
	}
	r := gin.New()
	r.POST("/login", Login)
	auth := r.Group("/api")
	
	// Set the middleware on the route you want to authenticate
	auth.Use(jwt.Verify)
	auth.GET("/hello", func(c *gin.Context) {
		claims := jwt.GetClaims(c)
		// claims["admin"].(bool)) -> true
		
		c.JSON(http.StatusOK, claims)
	})
	if err = r.Run(":8080"); err != nil {
		panic(err)
	}
}

func Login(c *gin.Context) {
	password := "test"
	if password != "test" {
		c.JSON(http.StatusForbidden, "login failed")
		return
	} else {
		// Issue Token
		token, _ := jwt.IssueToken(jwt.Claims{
			"admin": true,
		})
		
		c.JSON(http.StatusOK, string(token))
	}
}

以上でGinでJWT認証を行えます。Ginの全体の例はこちらに置いてます。簡単に使えると思うのでよかったら使ってみてください!

CATEGORIES

分類は、世界の見方

TAGS

記憶の糸をたぐりましょう
twitter icon
instagram icon
友だち追加
twitter iconinstagram icon友だち追加