# go で fernet token を使う

# fernet/fernet-go

こちら (opens new window)を使います、こんなかんじ

import (
	"fmt"
	"time"

	"github.com/fernet/fernet-go"
)

func cntlDecodeFernetMessage(c *gin.Context) {
	message := c.Param("message")
	k := fernet.MustDecodeKeys("cw_0x689RpI-jtRR7oE8h_eQsKImvJapLeSbXpwF4e4=")
	msg := fernet.VerifyAndDecrypt([]byte(message), 60*time.Second, k)
	fmt.Println(string(msg))
}

fernet.MustDecodeKeys の引数の key はkey format (opens new window) の仕様どおり 32バイトのバイト列を base64url エンコーディングしたもので、こちらのように以下のように作るとよいと思います

dd if=/dev/urandom bs=32 count=1 2>/dev/null | openssl base64 | tr +/ -_
YGhOn9OzAYQnE16wL-Vaw2rTgo4e0_rjSZWFyPBDo_o=

# references


Last Updated: 2021/2/28 9:04:39