gin-jwt の使い方


参考ページ
JWT Middleware for Gin Framework

プログラムをクローンします。

git clone https://github.com/appleboy/gin-jwt

サンプルのサーバーの起動

cd gin-jwt/
go run _example/basic/server.go

トークンの取得

get_token.sh
curl -X POST -d'username=admin' -d'password=admin' \
    localhost:8000/login > tmp001.json
#
jq . tmp001.json

実行結果

{
  "code": 200,
  "expire": "2021-02-03T09:44:01+09:00",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MTIzMTMwNDEsImlkIjoiYWRtaW4iLCJvcmlnX2lhdCI6MTYxMjMwOTQ0MX0.cXeEgaMRCZuV3kw1cA1HkyDKZ1jBG_X9QZuv2jIgk-o"
}

トークンの更新 (取得したトークンで置き換えて下さい)

go_refresh.sh
curl GET localhost:8000/auth/refresh_token \
 -H "Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MTIzMTA1OTMsImlkIjoiYWRtaW4iLCJvcmlnX2lhdCI6MTYxMjMwNjk5M30.kn2BF2LZ7s0NQkG1WhL2-B9gY01UEAUGKyibSSBzHsU"

ログインのテスト

go_login.sh
curl -X GET localhost:8000/auth/hello \
    -H "Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MTIzMTA1OTMsImlkIjoiYWRtaW4iLCJvcmlnX2lhdCI6MTYxMjMwNjk5M30.kn2BF2LZ7s0NQkG1WhL2-B9gY01UEAUGKyibSSBzHsU" | jq .

実行結果

{
  "text": "Hello World.",
  "userID": "admin",
  "userName": "admin"
}

サーバーのプログラムをちょっと改造してメッセージを変更します。

_example/basic/server.go
省略
func helloHandler(c *gin.Context) {
        claims := jwt.ExtractClaims(c)
        user, _ := c.Get(identityKey)
        c.JSON(200, gin.H{
                "userID":   claims[identityKey],
                "userName": user.(*User).UserName,
//              "text":     "Hello World.",
                "text":     "Hello World. こんにちは",
        })
}
省略

サーバーを再起動します。

go run _example/basic/server.go

再びログインをしてみます。

実行結果

{
  "text": "Hello World. こんにちは",
  "userID": "admin",
  "userName": "admin"
}