golang

golang-jwt, SignedString()のエラー"key is of invalid"の解決

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 文字や改行文字などの使用できない文字が含まれている場合

何か間違いがあれば、コメントを頂ければ幸いです。

-golang
-, , ,