golang-jwtパッケージを使用して、エラーに遭いました。
同じような境遇の人を助けられたら幸いです。
僕のエラーコード
以下のようなトークンを発行するコードにて、変数"err"に"key is of invalid"(キーが無効がなものです)が代入されてしまいました。
token := jwt.NewWithClaims(jwt.SigningMethodES256, jwt.MapClaims{
"sub": user.ID,
"exp": time.Now().Add(time.Hour * 24 * 30).Unix(),
})
tokenString, err := token.SignedString([]byte("secretKey"))
// SignedString()の中は[]byte型
fmt.Println(err)
//key is of invalid(キーが無効です)って言われた
早速結論ですが、上記コード1行目の"SigningMethodES256"が良くなくて、"SigningMethodHS256"に直すとエラーが無くなりました。
エディター(僕はvscode)の補完機能で、"jwt.Sining....."と途中まで書いたところで
"SigningMethodES256"のほうが候補の上に出てきてしまって、あ、これこれ、と安易に選んでしまったことが敗因です。
"SigningMethodES256"と"SigningMethodHS256"の違いについて気になる方のために、また記事を書くつもりです。
他に考えられるエラー原因
- SignedString()に[]byte型を渡していない
[]byte
は、Go言語のスライス(可変長配列)型の一つで、バイト列(byte列)を表現するためのデータ型です。
バイト列とは、8ビット(1バイト)の値の配列であり、コンピュータ内部でデータを扱う場合によく使用されます。Go言語では、文字列とバイト列は異なるデータ型として扱われ、文字列をバイト列に変換する際には 上記コードのように[]byte()
関数を使用することが一般的です。
- シークレットキーにnull 文字や改行文字などの使用できない文字が含まれている場合
何か間違いがあれば、コメントを頂ければ幸いです。