🔑
golang-jwt/jwt/v5を使ってEdDSAで署名しようとしたら「key is of invalid type」と怒られた
対象読者
- https://github.com/golang-jwt/jwt のライブラリを使っている
- エラー内容は
key is of invalid type
である
解消方法
結論から言うとkeyの型をed25519.PrivateKey
にする必要があります。
(crypto/ed25519
のimportも必要です)
以下、自コードからの抜粋になります。参考にしてみてください。
func generateJWT(key ed25519.PrivateKey) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodEdDSA, jwt.MapClaims{...})
return token.SignedString(key)
}
エラーの原因
https://golang-jwt.github.io/jwt/usage/signing_methods/#signing-methods-and-key-types から https://pkg.go.dev/crypto/ed25519#PrivateKey を読んでみると、期待されている型がcryptoに存在するようです。
PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer.
[]byte(key)
で定義していたkeyの型をed25519.PrivateKey
に変更することでエラーは解消されました。
Discussion