DRYな備忘録

Don't Repeat Yourself.

【Go言語】GoでJWT(JSON Web Token)を使うサンプル

参考

package main

import (
    "log"

    jwt "github.com/dgrijalva/jwt-go"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
    jwt.StandardClaims
}

func createTokenString() string {
    // User情報をtokenに込める
    token := jwt.NewWithClaims(jwt.GetSigningMethod("HS256"), &User{
        Name: "otiai10",
        Age:  30,
    })
    // Secretで文字列にする. このSecretはサーバだけが知っている
    tokenstring, err := token.SignedString([]byte("foobar"))
    if err != nil {
        log.Fatalln(err)
    }
    return tokenstring
}

func main() {
    // たとえばリクエストのヘダーからトークン文字列を受け取ったとする
    tokenstring := createTokenString()
    // これね
    log.Println(tokenstring)
    // サーバだけが知り得るSecretでこれをParseする
    token, err := jwt.Parse(tokenstring, func(token *jwt.Token) (interface{}, error) {
        return []byte("foobar"), nil
    })
    // Parseメソッドを使うと、Claimsはmapとして得られる
    log.Println(token.Claims, err)

    // 別例, jwt.StandardClaimsを満たすstructに直接decodeさせることもできる
    user := User{}
    token, err = jwt.ParseWithClaims(tokenstring, &user, func(token *jwt.Token) (interface{}, error) {
        return []byte("foobar"), nil
    })
    log.Println(token.Valid, user, err)
}

gistのほう Golang JWT Example (2017/Oct/26) · GitHub

DRY

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】